sentence = 'Cunning fox peels apples.'.strip('.')
def longest_word(target):
set = max(target.split(), key=len)
temp = [x for x in set]
count = 0
for i in range(len(temp)):
if temp[i].isalpha() == True:
count += 1
return set,count
print(longest_word(sentence))
如果句子中最长的单词在符号中的长度比任何其他单词长得多,则代码可以工作,但是,如果句子是这样的话,我应该如何调整代码:
sentence = 'Black bananas and green tomatos are red.'
我怎么能回答有n个同样长的单词?显然它足以计算其中一个单词中的符号,但是:
set = max(sentence.split(),key=len)
只返回最长的第一个单词。
答案 0 :(得分:2)
使用itertools
module。它有一个groupby()
函数,可用于根据自定义函数对迭代器进行分组,在本例中为len()
:
>>> sentence = 'Black bananas and green tomatos are red.'
>>> words = sorted(sentence.strip(".").split(), key=len)
>>> groups = [list(g) for k,g in itertools.groupby(words, len)]
>>> groups
[['and', 'are', 'red'], ['Black', 'green'], ['bananas', 'tomatos']]
>>> groups[-1]
['bananas', 'tomatos']
答案 1 :(得分:1)
您可能需要在目标列表中进行两次传递,一次获得最大长度,然后选择长度与最大值匹配的所有单词:
def longest_words(targets):
targets = targets.split()
max_len = max(len(item) for item in targets)
return set(item for item in targets if len(item) == max_len)
快速测试:
In [17]: sentence = 'Black bananas and green tomatos are red.'
In [18]: longest_words(sentence.strip('.'))
Out[18]: {'bananas', 'tomatos'}
答案 2 :(得分:0)
您可以先获得最大长度,然后检查并获取相同长度的每个单词:
sentence = 'Black bananas and green tomatos are red.'.strip('.')
def longest_word(target):
words = target.split()
max_len = max([len(w) for w in words])
return max_len, [w for w in words if len(w)==max_len]
print(longest_word(sentence))
您还可以定义自定义len
功能,仅计算字符数
def word_len(word):
return len([c for c in word if c.isalpha()])
并在前一个示例中将len
替换为word_len
。
答案 3 :(得分:0)
我的函数返回一个包含最长单词或单词的列表。
def longest(sentence):
ordered = sorted(sentence.split(), key=len)
l = len(ordered[-1]) # the last, longest element
m = [ordered[-1]]
for elt in ordered[-2::-1]:
if len(elt) < l : return m
m.append(elt)
return m