Python 有没有一种简单的方法来获取包含某个字母的最长单词?

Python 有没有一种简单的方法来获取包含某个字母的最长单词?,python,if-statement,Python,If Statement,我试图通过for循环获得包含字母“f”的最大单词,通过我的代码,我试图用if和and语句使其尽可能简单。但是,它不工作,因为它返回的是最大的单词,但不是包含字母f的单词,为什么它不工作 def main(): sentence = "Absence makes the heart grow fonder" letter = "f" longest_word = get_longest_word(sentence, letter) print('"' + longe

我试图通过for循环获得包含字母“f”的最大单词,通过我的代码,我试图用if和and语句使其尽可能简单。但是,它不工作,因为它返回的是最大的单词,但不是包含字母f的单词,为什么它不工作

def main():
    sentence = "Absence makes the heart grow fonder"
    letter = "f"
    longest_word = get_longest_word(sentence, letter)
    print('"' + longest_word + '" is the longest word containing the letter "'
          + letter + '".')

def get_longest_word(sentence, letter):
    words_list = sentence.split()
    largest = words_list[0]
    my_list = []
    for word in words_list:
        if letter in word and len(word) > len(largest):
            largest = word
    return largest 


main()

使用中的操作符可以更轻松地实现这一点:

for word in word_list:
    if 'f' in word:
        longest_words.append(word)

longest_word = sorted(longest_words)[0]

原因是您将
最大的
初始化为
单词列表[0]
,这是句子中最长的单词
“缺席”

因此,即使到达
'fonder'
,即使
if
的第一部分通过(它包含
'f'
),关于长度的第二部分也不会通过

就我个人而言,我会这样做:

from operator import itemgetter

def get_longest_word(sentence, letter):
    words_with_letter = ((word, len(word)) for word in sentence.split() if letter in word)
    return max(words_with_letter, key=itemgetter(1))[0]
这会将句子转换为元组的iterable,其中第一个元素是单词,第二个元素是单词的长度,并且所有单词都已经包含有问题的字母

然后,我们需要做的就是得到长度最长的单词,即第二个位置的最大值

输出:

"fonder" is the longest word containing the letter "f".

问题是,您在第一个单词的首字母上初始化了
最大的
,即使它没有要查找的字母。将其初始化为
,然后删除
我的列表(您没有使用该列表)