Python 对列表中字符串的字符进行计数并分类为组

Python 对列表中字符串的字符进行计数并分类为组,python,python-3.x,Python,Python 3.x,使用Python3计算列表(字符串)的长度直方图的最佳方法是什么 程序将计算所有元素的长度,将具有相同长度的元素分组,并返回每个组的大小,与该组中某个元素的长度配对 对于以下输入列表: lis = [ "this" , "is" , "what" , "i" , "have" , "to" , "do" ] 预期结果是: Letters per word: 3 with 4 letters 3 with 2 letters 1 with 1 letters 是否有一个内置的容器或功能可以促

使用Python3计算列表(字符串)的长度直方图的最佳方法是什么

程序将计算所有元素的长度,将具有相同长度的元素分组,并返回每个组的大小,与该组中某个元素的长度配对

对于以下输入列表:

lis = [ "this" , "is" , "what" , "i" , "have" , "to" , "do" ]
预期结果是:

Letters per word:

3 with 4 letters
3 with 2 letters
1 with 1 letters
是否有一个内置的容器或功能可以促进这一点?

使用和:

您可以使用它统计iterable中的任何哈希值

>>> lis = [ "this" , "is" , "what" , "i" , "have" , "to" , "do" ]
>>> from collections import Counter
>>> count = Counter(len(x) for x in lis)
>>> for key in count:
    print(count[key], 'with', key, 'letters')


1 with 1 letters
3 with 2 letters
3 with 4 letters

我会使用集合。defaultdict:

import sys
import collections

def processData(data):
    results = collections.defaultdict(list)
    for word in data:
        results[len(word)].append(word)
    return results

if len(sys.argv) > 1:
    data = sys.argv[1:]
    print "Letters per word:\n"
    for k,v in dict(processData(data)).iteritems():
        print "{} with {} letters --> {}".format(len(v), k, ', '.join(v))
输出:

➜ python test.py stack overflow rocks
Letters per word:

1 with 8 letters --> overflow
2 with 5 letters --> stack, rocks

现在还不清楚你的问题是什么,请试着改写你需要的内容。我喜欢也讨厌这个答案,因为它同时是一条很棒的Python,是一个应该关闭的问题的复制和可复制的答案。@Two Bitalchest发布后我有同样复杂的感觉,阅读naltipar的评论并意识到这一点。也许OP仍然可以解决他的问题?@arekolek这可能很好,不过为了清晰起见,它可能需要一些编辑。然而,今天;今天,吸血鬼帮赢了(写得漂亮!
➜ python test.py stack overflow rocks
Letters per word:

1 with 8 letters --> overflow
2 with 5 letters --> stack, rocks
lis = [ "this" , "is" , "what" , "i" , "have" , "to" , "do" ]
a=[]
for item in lis:
    a.append(len(item)) 
b=set(a) 
print "Letters per words are :"
for item in b:
    k=a.count(item)
    print "%d with %d letters"%(k,item)