Longest strings from list
我正在创建一个函数,它从列表中返回最长的字符串值。当只有一个字符串的字符数最多时,我的代码就会工作。我试着让它打印所有最长的字符串,如果有不止一个,我不希望它们被重复。当我运行这个时,它只返回"hello",而我希望它也返回"ohman"和"yoloo"。我觉得问题出在
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 |
一个小小的解释。这称为列表理解,它允许您将一个列表理解为另一个列表。代码
所以现在我们有了一个清单
现在您有了最大长度,可以过滤原始列表:
1 | longest_strings = [s for s in stringlist if len(s) == maxlength] |
正如它在英语中所说:"如果
最后,如果要使结果唯一,可以使用
1 | unique_longest_strings = list(set(longest_strings)) |
(我们打电话给
这可以归结为:
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) |
也许你写错了行
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 |
但我认为乔纳森·莱因哈特提供了一种更好的方法。