Python-如何使用计数器逐行计数

Python-如何使用计数器逐行计数,python,counter,Python,Counter,我有下面的代码,它打开了一个包含逗号分隔数字的文本文件 from collections import Counter with open("lottoresults.txt") as inf: all_lines = [inf.read()] print(all_lines) for each_line in all_lines: print(each_line) counts = Counter(each_line)

我有下面的代码,它打开了一个包含逗号分隔数字的文本文件

from collections import Counter

with open("lottoresults.txt") as inf:
    all_lines = [inf.read()]
    print(all_lines)
    for each_line in all_lines:
        print(each_line)
        counts = Counter(each_line)
        set = each_line.replace("", "").split()
        print(set)
        for numbers in set:
            nums = [int(i) for i in numbers.replace(",", "\n").split()]
            print(nums)
            for number in nums:
                counts = Counter(nums)
print(counts)
结果是:

['1,2,3,4,5\n1,3,5,6,7\n1,8,9,10,11']
1,2,3,4,5
1,3,5,6,7
1,8,9,10,11
['1,2,3,4,5', '1,3,5,6,7', '1,8,9,10,11']
[1, 2, 3, 4, 5]
[1, 3, 5, 6, 7]
[1, 8, 9, 10, 11]
Counter({8: 1, 1: 1, 10: 1, 11: 1, 9: 1})
我试图完成的是让程序读取第一行,运行计数器检查数字出现的次数,然后读取第二行,重新计数(即将计数添加到上一个计数中)

我哪里做错了?它目前甚至不计算数字,因为“1”的实例超过1个。

您可以使用
集合的方法。计数器
,否则每次迭代都会覆盖
计数

from collections import Counter

counts = Counter()
with open("lottoresults.txt") as inf:
    for each_line in inf:
        counts.update(int(i) for i in each_line.split(','))
print(counts)
结果

Counter({1: 3, 3: 2, 5: 2, 2: 1, 4: 1, 6: 1, 7: 1, 8: 1, 9: 1, 10: 1, 11: 1})
您可以使用
集合的方法。计数器
,否则每次迭代都会覆盖
计数

from collections import Counter

counts = Counter()
with open("lottoresults.txt") as inf:
    for each_line in inf:
        counts.update(int(i) for i in each_line.split(','))
print(counts)
结果

Counter({1: 3, 3: 2, 5: 2, 2: 1, 4: 1, 6: 1, 7: 1, 8: 1, 9: 1, 10: 1, 11: 1})
这是你想要的密码吗


这是您想要的正确代码吗?

提示:您是否观察到仅最后一个数组的计数所产生的输出?这意味着,计数器正在重新初始化,但没有更新。我确实观察到了它,但现在我意识到为什么它将数字计数为一次!谢谢。提示:您是否观察到仅最后一个数组的计数的输出结果?这意味着,计数器正在重新初始化,但没有更新。我确实观察到了它,但现在我意识到为什么它将数字计数为一次!谢谢。+1 update()方法可能是最干净的方法。仅供参考,这是在
c.update(map(int,line.split(','))
中使用map()的好机会,或者至少是在
c.update(int(i)中使用一个生成器表达式,用于line.split(','))
。对生成器表达式+1的良好调用update()方法可能是最干净的方法。仅供参考,这是在
c.update(map(int,line.split(','))
中使用map()的好机会,或者至少是在
c.update(int(i)中使用一个生成器表达式,比如在line.split(','))
中使用一个生成器表达式。调用生成器表达式很好,就是这样。一旦你看到它正常工作,它就非常有意义。我试图通过在最后封装它来计算每一个,而实际上我应该从它开始…就是这样。一旦你看到它正常工作,它就非常有意义。我试图通过在最后封装它来计算每一个,而实际上我应该从它开始。。。