我找到了这个代码示例,我认为它写得很好,但是我很难理解为什么它的一部分工作。
代码搜索字符串中最长的单词:
def LongestWord(str):
''.join(map(lambda x: [' ',x][x.isalnum()], str)).split()我不知道[' ',x][x.isalnum()]是如何工作的。这个建筑有名字吗?
发布于 2014-07-20 22:13:29
把它分成两部分..。
[' ', x]生成一个包含2个元素的列表。改写为:
lst = [' ', x]
lst[x.isalnum()]现在,我们看到第二个括号是索引由第一个括号创建的列表。由于str.isalnum()返回布尔值(True或False),并且布尔值的行为类似于python中的整数(True -> 1,False -> 0),所以构造只会选择列表中的两个元素之一。
请注意,现在(python2.5及更高版本),使用条件表达式更为惯用(而且可能更有效):
lambda x: x if x.isalnum() else ' '发布于 2014-07-20 23:41:18
理解此代码的关键是知道布尔值可用于索引列表。
['a','b'][True] # produces 'b'
['a','b'][False] # produces 'a'所以密码
[' ',x][x.isalnum()]如果x是alpha-数值,则会产生x,否则会产生‘’。
发布于 2014-07-20 22:37:57
这是一种将句子字符串拆分成单字列表的方法,但将所有非字母数字字符替换为空格,该空格通过分隔符被删除。要理解它,您必须从map命令开始。字符串(str)由lambda函数检查,它是否为字母数字,如果是,则字符保持不变('x'),但如果不是,则由‘’(空格)替换。括号的工作方式是假的,对的。map函数遍历字符串(str)。然后,生成的列表(带有单个字符)作为字符串(使用"".join命令)连接到完整的句子中,然后分裂成单词(使用拆分()命令,以空格字符作为分隔符)。
https://stackoverflow.com/questions/24855406
复制相似问题