句子中最长的单词,长度可能相等

时间:2014-11-16 16:39:27

标签: python list-comprehension

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)

只返回最长的第一个单词。

4 个答案:

答案 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