python中的两个相邻列表

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()]运作的.这个结构有名字吗?

mgi*_*son 5

把它分成两部分......

[' ', x]
Run Code Online (Sandbox Code Playgroud)

构建2个元素的列表.重写为:

lst = [' ', x]
lst[x.isalnum()]
Run Code Online (Sandbox Code Playgroud)

现在我们看到第二个括号是索引由第一个括号创建的列表.因为str.isalnum()返回一个布尔(TrueFalse),并且因为布尔值在python(True- > 1,False- > 0)中表现得像整数,所以构造只选择列表中的两个元素之一.

请注意,现在(python2.5及更高版本),使用条件表达式更具惯用性(并且可能更高效):

lambda x: x if x.isalnum() else ' '
Run Code Online (Sandbox Code Playgroud)