2015-08-26 32 views
2

代码:的Python collections.Counter似乎打破了原有的列表

categorycounts = collections.Counter(categories) 

for循环似乎打破,如果我尝试算:

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') 

所以,如果我注释掉此代码的工作类别列表中相同字符串的数量。 collections.Counter()是否修改原始类别对象?

回答

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]: [] 

的解决方案是在调用之前collections.Counter构建sequence。 例如,列表可以使用两种构造list

categories = list(map(operator.itemgetter(-1), sortedgroups)) 

list comprehension

categories = [x[-1] for x in sortedgroups] 
+1

那么,呃,我怎么能解决这个问题?我对Python很新,但对一般的编程不是。类别在collections.counter这一行之前是这样的一个列表:'categories = ['a','a','a','b','b','c']'编辑:Aha,好像你已经编辑器你的答案:) – Piwwoli

+0

谢谢!用list()包装地图的东西解决了这个问题。 – Piwwoli

相关问题