非常陌生,并尝试在线学习一些示例来自学。我解决了一个问题,但当我和朋友交谈时,他告诉我应该使用列表理解来完成这样的任务。唯一的问题是我无法看到如何使用列表理解而不是生成器函数来实现任务。这是有效的代码,感谢所有帮助!
#!/usr/bin/python
def find_longest_word(sentence):
word = sentence.split()
long_word = max(len(s) for s in word) # [x for x in range]
print "The length of the longest word is: ",long_word
#return
find_longest_word("The quick brown fox jumps over the lazy dog with pneumonia") # For testing
由于
答案 0 :(得分:2)
列表理解似乎不适合您寻求的结果。相反,您可以使用位置参数word
将列表max()
传递给内置函数key
:一个对word
中的每个元素进行操作并返回值的函数(长度,在这种情况下)作为排序值:
len(max(word,key=len))
答案 1 :(得分:1)
让我们快速谈谈列表理解......
让我们像这样正常for loop
:
sentence = 'Hello how are you doing today?'
lengths = []
for word in sentence.split():
lengths.append(len(word))
这相当于:
[len(word) for word in sentence.split()]
单个for循环列表理解的正常语法是[value for value in list]
在哪里可以看到for value in list
与正常for循环相同。唯一的区别是在for循环之后返回的值不是在它之前。
对于您的情况,您可以执行此操作:max([len(word) for word in sentence.split()])
答案 2 :(得分:1)
优于列表理解,使用高阶函数(可以将另一个函数作为参数的函数),例如max
。 key
的{{1}}参数将应用于max
中的每个元素,并且将根据该元素确定排序。以下是几个例子:
sentence.split()
请注意>>> def find_longest_word(sentence):
... longest = max(sentence.split(), key=len)
... print(longest, len(longest))
...
>>> find_longest_word("The quick brown fox jumps over the lazy dog")
quick 5
>>> find_longest_word("The quick brown fox juuuuumps over the lazy dog")
juuuuumps 9
>>>
是用于确定对象长度的python内置函数。
答案 3 :(得分:0)
要使用列表理解,您可以将max(len(s) for s in word)
替换为max([len(s) for s in word])
,但不需要这样做,两个示例都可以正常工作。您只需要了解此列表理解如何工作以解决任务。对于初学者来说,了解其工作原理要容易得多:
def find_longest_word(sentence):
res = []
words = sentence.split()
for word in words:
res.append(len(word))
long_word = max(res)
print "The length of the longest word is: ", long_word
find_longest_word("The quick brown fox jumps over the lazy dog")
比使用一些列表推导或生成器。
答案 4 :(得分:0)
只是发布我的版本...只是无法抵抗列表理解问题 - 如何pythonic!
>>> s = "The quick brown fox jumps over the lazy dog with pneumonia"
>>> w = max([word for word in s.split()], key=len)
>>> print('{} {}'.format(w, len(w)))
pneumonia 9