python中的两个相邻列表

时间:2014-07-20 22:11:05

标签: python string lambda

我找到了这个代码示例,我认为它编写得非常好,但是我很难理解为什么它的部分工作原理。

代码搜索字符串中最长的单词:

def LongestWord(str):
    ''.join(map(lambda x: [' ',x][x.isalnum()], str)).split()

我不知道[' ',x][x.isalnum()]是如何运作的。这种结构有名字吗?

3 个答案:

答案 0 :(得分:5)

将其分为两部分......

[' ', x]

构建一个包含2个元素的列表。重写为:

lst = [' ', x]
lst[x.isalnum()]

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

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

lambda x: x if x.isalnum() else ' '

答案 1 :(得分:2)

理解这段代码的关键是要知道布尔值可以用来索引列表。

['a','b'][True] # produces 'b'
['a','b'][False] # produces 'a'

所以代码

[' ',x][x.isalnum()]
如果x是字母数字,

将产生x,否则它将产生''

答案 2 :(得分:1)

这是一种将句子字符串分成具有单个单词的列表的方法,但是将所有非字母数字字符替换为通过作为分隔符而被删除的空格。要理解它,您必须从map命令开始。字符串(str)由lambda函数检查,无论它是否为字母数字,如果是,则字符保持不变('x'),但如果不是,则由''(空格)替换。括号的作用类似[false,true] [condition]。 map函数遍历字符串(str)。然后,结果列表(带有单个字符)将作为字符串(使用“”.join命令)连接到完整的句子并分成单词(使用split()命令,并使用空格字符作为分隔符)。