New*_*New 3 python string lambda
我发现这个代码示例,我认为编写得非常好,但是我很难理解为什么它的部分工作原理.
代码搜索字符串中最长的单词:
def LongestWord(str):
''.join(map(lambda x: [' ',x][x.isalnum()], str)).split()
Run Code Online (Sandbox Code Playgroud)
我不知道是怎么[' ',x][x.isalnum()]运作的.这个结构有名字吗?
把它分成两部分......
[' ', x]
Run Code Online (Sandbox Code Playgroud)
构建2个元素的列表.重写为:
lst = [' ', x]
lst[x.isalnum()]
Run Code Online (Sandbox Code Playgroud)
现在我们看到第二个括号是索引由第一个括号创建的列表.因为str.isalnum()返回一个布尔(True或False),并且因为布尔值在python(True- > 1,False- > 0)中表现得像整数,所以构造只选择列表中的两个元素之一.
请注意,现在(python2.5及更高版本),使用条件表达式更具惯用性(并且可能更高效):
lambda x: x if x.isalnum() else ' '
Run Code Online (Sandbox Code Playgroud)