我需要查看列表并打印其中最长的单词。我只能用一个单词做这个,但是如果有两个单词长三个字,就无法弄清楚如何打印多个单词。
我试过了
list.sort (key=len, reverse =True)
print ("The longest word in the list is: " , list[0])
这种方法有效但只能打印出最长的一个,这对于一个以上的最长单词来说并不好。
我也试过了:
p=0
for item in list:
if len (item) > p:
s=item
p = len(item)
print (s)
这也与前面的代码相同
我还需要为列表中最短的单词执行此操作。
道歉,如果这不是一个好问题,那就是我的第一个。
答案 0 :(得分:3)
首先,不要永远使用list
作为变量名称,因为它会覆盖内置类型,并可能在以后造成麻烦。
您可以为最长的单词执行此操作:
for i in lst:
if len(i) == max(lst, key=len):
print(i)
最短的话:
for i in lst:
if len(i) == min(lst, key=len):
print(i)
第一个代码打印与最长字符串长度相同的字符串。第二个做同样的事,但用最短的字符串。
小优化是在循环之前预先计算最大/最小长度,因此您不需要每次都重新计算它。
maxLen = max(lst, key=len)
for i in lst:
if len(i) == maxLen:
print(i)
对于另一个循环也可以这样做。
答案 1 :(得分:2)
您现有的代码实际上可以修改为没有太多麻烦。不要在s
中保留单个字符串,而是保留list
个字符串。如果你找到一个长度与之前最长的一个append
它。如果你找到一个甚至更长的那个,抛弃list
并开始一个新的。像这样:
p=0
s=[]
for item in lst:
if len(item) > p:
s=[item]
p=len(item)
elif len(item) == p:
s.append(item)
print(s)
答案 2 :(得分:1)
波动率的答案很好,但让我们看看另一种方法。
如果您不仅按顺序排列了列表,还将其分组为相同长度的批次,该怎么办?然后这很容易:打印第一组,然后打印最后一组。
还有一个Python附带的功能,为您进行分组itertools.groupby
,因此 很容易:
l.sort(key=len) # puts them in order
groups = list(itertools.groupby(l, key=len))
print('The shortest words are: {}'.format(groups[0][1])
print('The longest words are: {}'.format(groups[-1][1])
你可以把它变成一个单行:
groups = list(itertools.groupby(sorted(l, key=len), key=len))
但是,在这种情况下我不认为我会这样做;重复key=len
和所有这些额外的括号使得阅读更加困难。
与此同时,当您真正想要第一个组时,可以避免创建整个组列表:
l.sort(key=len)
shortest = itertools.groupby(l, key=len)
print('The shortest words are: {}'.format(next(shortest)[1]))
longest = itertools.groupby(reversed(l), key=len)
print('The longest words are: {}'.format(next(longest)[1]))
但是,除非list
真的很大,否则我不担心这个。
答案 3 :(得分:0)
您可以使用词典来收集词语:
results = {}
for word in words:
if len(word) not in results:
results[len(word)] = []
results[len(word)].append(word)
接下来按键对字典进行排序,这些是长度并打印单词。这将首先打印最长的单词,然后将其反转,删除reverse=True
:
for i in sorted(results.keys(), reverse=True):
print 'Number of words with length {}: {}'.format(i,len(results[i]))
for word in results[i]:
print word
仅打印最短和最长的:
shortest = sorted(results.keys())[0]
longest = sorted(results.keys(), reverse=True)[0]
print 'Shortest words:'
for word in results[shortest]:
print word
print 'Longest words:'
for word in results[longest]:
print word
答案 4 :(得分:0)
总是可以使用lambda函数
longest = len(sorted(list, key=len)[-1])
filter(lambda item: len(item) == longest, list)
将产生最长的单词
shortest = len(sorted(list, key=len)[0])
filter(lambda item: len(item) == shortest, list)
将产生最短的单词
答案 5 :(得分:-1)
list.sort (key=len, reverse =True)
print ("The longest 3 words in the list are: " , list[:3])