2015-08-26 33 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

相關問題