Python 获取名称列表中最长的名称

Python 获取名称列表中最长的名称,python,python-3.x,Python,Python 3.x,例如: def get_longest_name(a_list): count = 0 for i in a_list: if len(i) > count: count = len(i) word = i return word def main(): print("1.", get_longest_name(["Candide", "Jessie", "Kath", "Amity",

例如:

def get_longest_name(a_list):
    count = 0
    for i in a_list:
        if len(i) > count: 
           count = len(i)
           word = i
    return word
def main():
    print("1.", get_longest_name(["Candide", "Jessie", "Kath", "Amity", 
   "Raeanne"]))
    print("2.", get_longest_name(["Josephine", "Jessie", "Penelope", "Jin", 
  "Rosamunda", "Annabelle"]))
    print("3.", get_longest_name(["Alan", "Jess", "Amity", "Rosalie", 
  "Raeanne"]))
    print("4. ", "***", get_longest_name(["Jo", "Jai", "Jen", "Jing", "Joey", 
   "Jess"]), "***", sep = "")
    print("5. ", "***", get_longest_name([]), "***", sep = "")
    print("6.", "***" + get_longest_name([""]) + "***")
main()
输出如下:

1. Candide
2. Josephine
3. Rosalie
4. ***Jing***
我已经得到了三个正确的输出(三个最长的名称)。函数应该返回列表中字符最多的单词(最长的单词),但只考虑具有六个或更多字符的单词。如果列表中两个或多个单词的字符数与最长单词的字符数相同,则函数应返回列表开头字符数最多的第一个单词。如果参数列表为空,或者如果列表中没有包含六个以上字符的单词,则函数应返回空字符串。因此,输出应该是这样的:

 1. Candide
 2. Josephine
 3. Rosalie
 4. ******
 5. ******
 6. ******
您可以将
max()
key=len
一起使用:

def get_longest_name(a_list, min_length=6):
    return max((name for name in a_list if len(name) >= min_length), key=len, default='')

生成器表达式处理
A_列表
以仅包括长度>=6的名称。

替代@mhawke解决方案:

def get_longest_name(a_list, min_length=6):
    longest = max(a_list, key=len) if a_list else ''
    return longest if longest and len(longest) >= min_length else ''

到目前为止,您试图解决这些附加问题的方法是什么?顺便说一句,如果
a_列表
为空,或者不包含任何通过
if
测试的单词,则该代码将引发
NameError
。@Moses:感谢您在Python 3中编辑.FWIW,
max
接受一个
default
arg,如果传递给它一个空的iterable,它将返回该参数。@PM2Ring:谢谢,我不知道
default
参数。包括在我的回答中。