问题描述
def frequencies(data):
data.sort()
count = 0
previous = data[0]
print("data\tfrequency") # '\t' is the TAB character
for d in data:
if d == previous:
# same as the previous, so just increment the count
count += 1
else:
# we've found a new item so print out the old and reset the count
print(str(previous) + "\t" + str(count))
count = 1
previous = d
所以我有这个频率代码,但它每次都会在我的列表中留下最后一个数字。
它可能与我之前开始的位置有关,也可能与我最后重置到d之前的位置有关。
1楼
对于最后一组元素,您永远不会将它们打印出来,因为您从未找到过不同的元素。 你需要在循环后重复打印输出。
但那是学术上的;
在现实世界中,你更有可能使用Counter
:
from collections import Counter
counter = Counter(data)
for key in counter:
print("%s\t%d" % (key, counter[key]))
2楼
您可以使用count
来count
列表/序列中的项目。
所以你的代码可以简化为这样:
def frequencies(data):
unique_items = set(data)
for item in unique_items:
print('%s\t%s' % (item, data.count(item)))