Python - 从列表中打印多个最短和最长的单词

时间:2013-02-06 09:02:38

标签: python arrays list sorting


我需要查看列表并打印其中最长的单词。我只能用一个单词做这个,但是如果有两个单词长三个字,就无法弄清楚如何打印多个单词。 我试过了

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)

这也与前面的代码相同

我还需要为列表中最短的单词执行此操作。

道歉,如果这不是一个好问题,那就是我的第一个。

6 个答案:

答案 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])