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]