Python collections.Counter似乎打破了原始列表

Piw*_*oli 2 python collections list

码:

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')
Run Code Online (Sandbox Code Playgroud)

所以如果我注释掉这个代码就行了:

categorycounts = collections.Counter(categories)
Run Code Online (Sandbox Code Playgroud)

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

vau*_*tah 5

你好像在使用Python 3.

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

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]: []
Run Code Online (Sandbox Code Playgroud)

解决方案是在调用之前构建序列collections.Counter.例如,可以使用以下任一方式构建列表list:

categories = list(map(operator.itemgetter(-1), sortedgroups))
Run Code Online (Sandbox Code Playgroud)

列表理解:

categories = [x[-1] for x in sortedgroups]
Run Code Online (Sandbox Code Playgroud)