String Python多列表max()
在python中,我有一个满是字符串的列表,我希望它按长度查找最大值。如果有一些字符串共享相同的长度,它们将同时打印出来。我有,但它似乎不起作用String Python多列表max(),string,python-3.x,list,max,String,Python 3.x,List,Max,在python中,我有一个满是字符串的列表,我希望它按长度查找最大值。如果有一些字符串共享相同的长度,它们将同时打印出来。我有,但它似乎不起作用 if len(in_list)>1: while len(in_list) == a: a = max(in_list, key=len) print("Pair", pair,":", a) in_list.remove(a) elif len(in_list)<1: print("Pair", pair
if len(in_list)>1:
while len(in_list) == a:
a = max(in_list, key=len)
print("Pair", pair,":", a)
in_list.remove(a)
elif len(in_list)<1:
print("Pair", pair, ": No Common Sequence Found")
如果len(在列表中)>1:
而len(在列表中)=a:
a=最大值(在列表中,键=len)
打印(“对”,对,:”,a)
在列表中。删除(a)
elif len(在列表中)给定的字符串
:
maxes = [string for string in strings if len(string) == max(map(len, strings))]
更容易理解(而且这种方法效率更高;多亏Shadow Ranger指出了这一点):
如果字符串的长度与最长字符串的长度相同,则返回所有字符串。给定字符串列表:
# word strings -> string to create a three way tie:
strings = "In python I have a list full of string and I want it to find the max by length".split()
我们可以做到简洁、合理、高效:
maxlen = max(len(s) for s in strings)
longest = filter(lambda s: len(s) == maxlen, strings)
print(list(longest))
但是,这种效率更多地是由于将事情向下推到C级别,而不是由于一个好的算法,当我们只需要遍历字符串列表一次时,我们遍历了字符串列表两次:
longest = strings[:1]
length = len(longest)
for string in strings:
string_length = len(string)
if string_length >= length:
if string_length > length:
longest = []
length = string_length
longest.append(string)
print(longest)
在编译语言中,这种更详细的方法可能会更快,因为它避免了重复。如果我们想要优雅和速度,那就需要一本字典:
counter = {}
for string in strings:
counter.setdefault(len(string), []).append(string)
longest = counter[max(counter)]
print(longest)
在这三种情况下,我们都得到了回报:
['python', 'string', 'length']
当len(在列表中)=a时,你想用做什么?我不知道,确切地说。我是新手,但我只是想得到字符串的最大值。如果字符串的两个元素共享相同的长度,我希望它同时打印这两个元素。这有意义吗?哦,这对是我做的一个循环:“更可读的版本”(仍然可以使用map
,就在前一行)也更有效;在条件中内联max
计算将每次重新计算它,将O(n)
工作转换为O(n**2)
工作。Python不会为您优化这类事情。@ShadowRanger这也是真的。我将把它写下来作为旁注。我来自PPCG,在那里效率在大多数时候都是无关紧要的;):P
['python', 'string', 'length']