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

时间:2017-10-03 03:12:07

标签: 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", 
   "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. ******

我不确定如何修复它。

3 个答案:

答案 0 :(得分:4)

您可以使用内置的max()功能:

>>> max(["Candide", "Jessie", "Kath", "Amity", "Raeanne"], key=len)
'Candide'

答案 1 :(得分:0)

你想要实现的输出含糊不清。与你所说的不同,Candide和Raeanne的长度相同。同样地,在第2和第3种情况下存在相同长度的名称。在第4个,有三个相同长度的名字。

假设您要为[],['']输出‘******’以及包含相等长度名称的列表,或者长度大于列表中任何其他名称的名称,这是我的代码:

def get_longest_name(a_list):
    longest_name = '******'

    if not a_list:
        return longest_name

    max_length = max([len(name) for name in a_list])
    duplicate_lengths = [name for name in a_list if len(name) == max_length]

    if a_list == [''] or len(duplicate_lengths) > 1:
        longest_name = longest_name
    else:
        longest_name = ''.join(duplicate_lengths)

    return longest_name

答案 2 :(得分:0)

所以,这里已经有了很好的解决方案但是如果你想为自己创建逻辑以找到max而不是max而不是使用内置max(" ******")而不使用内置max( )功能然后看看:

让我们分三步解决您的问题:

用于测试目的假设列表是:

word_list=["Jo", "Jai", "Jen", "Jing", "Joeyr",
       "Jess"]
  

第一步:

假设你想要,如果三个字符len相同然后打印(" ******")所以首先我们必须过滤掉列表中有多少个字符具有相同的长度,如果超过三个具有相同的长度然后打印(" ******")现在用于过滤我们可以使用filter,lambda和list comprehension但是在这里我将使用非常简单和可读的方法:

    len_of_characters=[]   #we will store len of characters in this list 
    more_than_3=[]         #we will store that int in this list 



for i in word_list:
    len_of_characters.append(len(i))
    for check in len_of_characters:
        if len_of_characters.count(check)>2:
            more_than_3.append(check)

现在我们的工作很顺利,我们正在迈向第二步:

  

第二步:

我们检查过如果一个列表有超过三个相同的len字符然后将len添加到名为more_than_3的列表中,现在我们将看到此问题的第二部分,假设列表没有相同的长度字符然后我们想要在该列表中使用最长的单词字符:

longest_word=[]        #we will store longest len word here

count_number = 0

for i in word_list:
    if more_than_3:

        print("******")
        break

    else:
        if len(i) > count_number:
            count_number = len(i)
            word = i

现在我们已经完成了这个问题所需的所有逻辑部分,现在让我们做最后一部分,它将检查more_than_3列表是否为空,而不是打印最长的单词,如果more_than_3不是空的而不是print(" ******"),非常简单:

try:
    longest_word.append(word)
except NameError:
    pass

if not more_than_3:
    print("".join(longest_word))

所有组合:

word_list=["Jo", "Jai", "Jen", "Jing", "Joeyr",
   "Jess"]

count_number = 0

longest_word=[]






len_of_characters=[]
more_than_3=[]

for i in word_list:
    len_of_characters.append(len(i))
    for check in len_of_characters:
        if len_of_characters.count(check)>2:
            more_than_3.append(check)

for i in word_list:
    if more_than_3:

        print("******")
        break

    else:
        if len(i) > count_number:
            count_number = len(i)
            word = i
try:
    longest_word.append(word)
except NameError:
    pass

if not more_than_3:
    print("".join(longest_word))