使用 lambda 的语法错误

2015-04-07 11:42:00 +08:00
 bugcoder

在codewars上面的一道题目
http://ww2.sinaimg.cn/large/4de96cb8jw1eqwupijy5jj20ej0ch75i.jpg
我试图用lambda来解决,下面是我的code:

def alphabet_position(text):
  return map(lambda char: ord(char)-ord('a') if char.isalpha(), text)

但是提示语法错误,实在不知道该如何解决,求指教。

3857 次点击
所在节点    Python
15 条回复
aaaa007cn
2015-04-07 11:48:29 +08:00
bugcoder
2015-04-07 11:53:18 +08:00
@aaaa007cn 我也看了一下有关lambda的语法,但是实在是第一次使用,感觉有点绕不明白了
Cynic222
2015-04-07 11:56:38 +08:00
@bugcoder 跟lambda无关,if-else错了
xcv58
2015-04-07 12:01:19 +08:00
[ord(c) - 96 for c in a.lower() if c.isalpha()]
dongweiming
2015-04-07 12:06:30 +08:00
一行语句if需要有else
aaaa007cn
2015-04-07 12:19:52 +08:00
嗯,如上
错的地方不是 lambda
而是 conditional expressions 条件表达式或者说 ternary operator 三元运算符
另外还要处理大小写和非字母字符
比如
filter(lambda x: x, map(lambda c: ord(c)-ord('a')+1 if c.isalpha() else 0, text.lower()))
最后再 join 下
bugcoder
2015-04-07 12:38:16 +08:00
@aaaa007cn
@Cynic222
@xcv58
@dongweiming

return " ".join(filter(lambda x: x,
map(lambda c: str(ord(c)-ord('a')+1) if c.isalpha() else '',
text.lower())))
的确是的,加了else就解决了,太感谢了~
好多层嵌套啊,我再多研究研究。
bugcoder
2015-04-07 12:52:08 +08:00
http://www.python-course.eu/lambda.php
结合这篇文章,感觉有点懂了,于是继续减少了一点代码,哈哈
先用filter过滤掉非字母:
filter(lambda x: x.isalpha(), text.lower())
然后用map转化为数字字符:
map(lambda c: str(ord(c)-ord('a')+1), filter(lambda x: x.isalpha(), text.lower()))
最后再join起来:
return " ".join(map(lambda c: str(ord(c)-ord('a')+1), filter(lambda x: x.isalpha(), text.lower())))
dongweiming
2015-04-07 14:01:01 +08:00
@bugcoder 这样快

' '.join(map(lambda c: str(ord(c)-ord('a')+1) if c.isalpha() else '', text.lower().replace(' ', '')))
dongweiming
2015-04-07 14:03:58 +08:00
@bugcoder 额已经不用判断了

' '.join(map(lambda c: str(ord(c)-ord('a')+1), text.lower().replace(' ', '')))
Valyrian
2015-04-07 16:25:58 +08:00
没有else
hahastudio
2015-04-07 16:48:08 +08:00
其实 map 的必要性不大
alphabet_position = lambda text: " ".join(str(ord(c)-ord('a')+1) for c in filter(lambda x: x.isalpha(), text.lower()))

a if b else c 就是 a ? b : c

我觉得一定又要有不少人批判 Python 的奇技淫巧了,因为我自己看着都别扭= =
flyee
2015-04-07 23:31:59 +08:00
@dongweiming

try `text = "a _ _ _ b"` with your code :)
bugcoder
2015-04-08 04:21:57 +08:00
@dongweiming
@flyee
恩,其实题目里面还要包含其他的非字母字符的,所以光空格还不够。
bugcoder
2015-04-08 04:25:42 +08:00
@hahastudio
其实我开始也是想实现这样的格式,只是当时还不知道用filter,这样我感觉比加了map的要更简单明了一些。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/182049

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX