统计列表中字符串的字符并分类到组中
用Python 3计算一个字符串列表的长度直方图,最好的方法是什么?
这个程序会计算列表中每个元素的长度,把长度相同的元素分在一组,然后返回每组的大小,以及该组中元素的长度。
对于下面这个输入列表:
lis = [ "this" , "is" , "what" , "i" , "have" , "to" , "do" ]
期望的结果是:
Letters per word:
3 with 4 letters
3 with 2 letters
1 with 1 letters
有没有现成的容器或者函数可以帮助实现这个功能?
相关文章:
- 暂无相关问题
4 个回答
0
我会使用 collections.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
0
在编程中,有时候我们会遇到一些问题,特别是在使用某些工具或库的时候。这些问题可能会让我们感到困惑,尤其是当我们刚开始学习编程的时候。
比如说,有人可能在使用某个特定的功能时,发现它没有按照预期的方式工作。这种情况可能是因为我们没有正确理解这个功能的用法,或者是因为我们没有按照要求提供必要的信息。
在这种情况下,查看相关的文档或者在网上搜索解决方案是很有帮助的。很多时候,其他人也遇到过类似的问题,他们可能已经分享了解决办法或者经验。
总之,遇到问题时不要气馁,保持耐心,多查资料,慢慢就能找到解决的办法。
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)
1
你可以使用来自 collections
库的 Counter
,它可以计算任何可哈希值在一个可迭代对象中的出现次数。
>>> 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
8
使用 collections.Counter
和 map
:
>>> from collections import Counter
>>> Counter(map(len, lis))
Counter({2: 3, 4: 3, 1: 1})