Python 计数器似乎打破了原来的列表

Python 计数器似乎打破了原来的列表,python,list,collections,Python,List,Collections,代码: 因此,如果我注释掉以下内容,则此代码有效: sortedgroups = sorted(metagroups, key=lambda group: group[-1]) categories = map(operator.itemgetter(-1), sortedgroups) categorycounts = collections.Counter(categories) print('Writing output files') with open('report.txt',

代码:

因此,如果我注释掉以下内容,则此代码有效:

sortedgroups = sorted(metagroups, key=lambda group: group[-1])
categories = map(operator.itemgetter(-1), sortedgroups)
categorycounts = collections.Counter(categories)

print('Writing output files')

with open('report.txt', 'a+') as f:
    for category in categories:
        f.write(category + '\n')

如果我尝试计算类别列表中相同字符串的数量,for循环似乎会中断。
collections.Counter()
是否修改了原始的categories对象?

您似乎正在使用Python 3

现在返回一个迭代器
collections.Counter(categories)
耗尽迭代器,就像下面示例中的
list(m)
一样

categorycounts = collections.Counter(categories)
解决方案是在调用
collections.Counter
之前构建一个计数器。 例如,可以使用以下任一方法构造列表:

或:


那么,我该怎么解决这个问题呢?我对Python非常陌生,但对一般的编程并不熟悉。分类在集合之前是这样一个列表。计数器行:
Categories=['a','a','b','b','c']
Edit:Aha,似乎您已经编辑了您的答案:)谢谢!将映射内容包装到list()中解决了这个问题。
In [3]: m = map(bool, [1, 2, 3, 4])

In [4]: list(m)
Out[4]: [True, True, True, True]

In [5]: list(m)
Out[5]: []
categories = list(map(operator.itemgetter(-1), sortedgroups))
categories = [x[-1] for x in sortedgroups]