关于python:列表中最长的字符串

Longest strings from list

我正在创建一个函数,它从列表中返回最长的字符串值。当只有一个字符串的字符数最多时,我的代码就会工作。我试着让它打印所有最长的字符串,如果有不止一个,我不希望它们被重复。当我运行这个时,它只返回"hello",而我希望它也返回"ohman"和"yoloo"。我觉得问题出在if item not list:这一行,但我已经尽力了,但没用。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
list = ['hi', 'hello', 'hey','ohman', 'yoloo', 'hello']
def length(lists):
    a = 0
    answer = ''
    for item in lists:
        x = len(item)
    if x > a:
        a = x
        answer = item
    elif x == a:
        if item not in list:
            answer = answer + ' ' + item
    return answer
print length(list)

首先,我们可以在列表中找到任何字符串的最大长度:

1
2
3
4
5
6
stringlist = ['hi', 'hello', 'hey','ohman', 'yoloo', 'hello']
#maxlength = max([len(s) for s in stringlist])
maxlength = max(len(s) for s in stringlist)  # omitting the brackets causes max
                                             # to operate on an iterable, instead
                                             # of first constructing a full list
                                             # in memory, which is more efficient

一个小小的解释。这称为列表理解,它允许您将一个列表理解为另一个列表。代码[len(s) for s in stringlist]的意思是"通过取stringlist生成一个类似于列表的对象,对于该列表中的每个s都给我len(s)(该字符串的长度)。

所以现在我们有了一个清单[2, 5, 3, 5, 5, 5]。然后我们在此调用内置的max()函数,它将返回5

现在您有了最大长度,可以过滤原始列表:

1
longest_strings = [s for s in stringlist if len(s) == maxlength]

正如它在英语中所说:"如果len(s)等于maxlength,那么对于stringlist中的每个字符串s,给我该字符串s"。

最后,如果要使结果唯一,可以使用set()构造器生成唯一集:

1
unique_longest_strings = list(set(longest_strings))

(我们打电话给list(),在删除重复项后将其返回列表。)

这可以归结为:

1
2
ml = max(len(s) for s in stringlist)
result = list(set(s for s in stringlist if len(s) == ml))

注意:不要使用一个名为EDCOX1(13)的变量,因为它重写了EDCOX1×13类型的名称的含义。


我非常赞同乔纳森·莱因哈特的回答,但我就是坚持不住…这个怎么样?

1
max(map(len, stringlist))

不需要写清单理解,这更简单…


我也有同样的问题。我的解决方案是这样的:

1
2
3
4
5
6
7
8
9
myList =['hi', 'hello', 'hey','ohman', 'yoloo', 'hello']
def get_longest_strings(myList):
        longest=len(max(myList,key=len))
        for each in myList:
                if(longest==len(each)):
                       #common_result is list to store longest string in list
                       common_result.append(each)
        return common_result
print(common_result)

也许你写错了行if item not in list:,缩进错误,修改如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
def length(lists):
    a = 0
    answer =""


    for item in lists:
        x = len(item)
        if x > a:
            a = x
            answer = item
        elif x == a:
            if item not in ans:
                answer = answer +"" + item
    return answer

但我认为乔纳森·莱因哈特提供了一种更好的方法。