我想知道是否有可能在理解中处理这个问题 名单 有些人喜欢:
text = "give the most longest word"
def LongestWord(text):
l = 0
words = list()
for x in text.split():
word = ''.join(y for y in x if y.isalnum())
words.append(word)
for word in words:
if l < len(word):
l = len(word)
r = word
return r
答案 0 :(得分:1)
不是一个而是两个列表理解:
s = 'ab, c d'
cmpfn = lambda x: -len(x)
sorted([''.join(y for y in x if y.isalnum()) for x in s.split()], key=cmpfn)[0]
答案 1 :(得分:1)
零列表理解:
import re
def longest_word(text):
return sorted(re.findall(r'\w+', text), key=len, reverse=True)[0]
print(longest_word("this is an example.")) # prints "example"
或者,如果你坚持,同样的事情,但列表理解:
def longest_word(text):
return [w for w in sorted(re.findall(r'\w+', text), key=len, reverse=True)][0]
答案 2 :(得分:0)
真的不需要列表理解。
import re
my_longest_word = max(re.findall(r'\w+', text), key=len)
或者,如果 不 想要import re
,则可以避免使用lambda表达式,并再次使用max
使用一个列表推导:
my_longest_word = max([ ''.join(l for l in word if l.isalnum())
for w in text.split() ], key = len)
这是如何运作的:
isalnum()
过滤掉评估每个单词中每个字母的非字母数字字符,并使用空格分成列表。 max
。 正则表达式解决方案的工作原理:
\w+
findall()
将匹配项置于字符串列表中Max
从列表中查找具有最大长度的元素。 输出(在两种情况下):
>>>text = "give the most longest word"
>>>my_longest_word
'longest'
>>>text = "what!! is ??with !@#$ these special CharACTERS?"
>>>my_longest_word
'CharACTERS'