我发现了这个代码示例,我认为它写得非常好,但我有些难以理解其中的一部分。
该代码搜索字符串中最长的单词:
def LongestWord(str):
''.join(map(lambda x: [' ',x][x.isalnum()], str)).split()
我不知道
[' ',x][x.isalnum()]
是如何工作的。这种写法有一个专业名称吗?将其分为2部分...
[' ', x]
构建一个包含2个元素的列表。请重新编写:
lst = [' ', x]
lst[x.isalnum()]
lambda x: x if x.isalnum() else ' '
''.join(x if x.isalnum() else ' ' for x in str).split()
。或者更好的方法是re.split("[^A-Za-z]+", str)
-- 函数的实际意图。 - Duneslambda
+ map
。我没有考虑优化整个表达式 - 只是关于我正在解释的那一部分进行优化。 - mgilson['a','b'][True] # produces 'b'
['a','b'][False] # produces 'a'
[' ',x][x.isalnum()]
lambda x: x if x.isalnum() else ' '
。 - jonrsharpe