2016-10-02 52 views
0

我在解析此數據時遇到問題。我想知道每個列表中有多少#1。找到該號碼後,我想將它追加到另一個列表中以備後用。如何對列表中的數據進行排序並追加列表中出現的次數

我似乎得到輸入:

--> [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] 

當我真的想:

--> [2, 2, 2, 2, 0, 2, 2, 1, 11, 0] 

這是代碼:

d = [] 
count = 0 

b = [[1,3,6,2,7,3,9,2,7,1,7], 
    [1,5,8,3,0,3,6,2,7,2,1], 
    [1,5,2,6,8,6,2,5,1,8,9], 
    [5,2,5,2,1,8,1,5,2,4,6], 
    [5,7,2,7,3,7,3,7,3,9,2], 
    [1,5,8,3,0,3,6,2,7,2,1], 
    [5,2,5,2,1,8,1,5,2,4,6], 
    [3,6,1,5,7,8,4,3,6,3,3], 
    [1,1,1,1,1,1,1,1,1,1,1], 
    [3,4,5,6,8,5,7,5,7,3,7]] 

for i in b: 
    for x in b: 
     if x == 1: 
      count =+ 1 
    d.append(count) 
    count = 0 

print(d) 
+0

我假設'= +'是一個錯字,你的意思是'+ ='。你可能想編輯這個問題的標題,因爲它與排序無關。 – AChampion

+0

你錯了@AChampion –

+0

希望下面的答案幫助你解決了你的問題。 – AChampion

回答

0

你迭代錯了對象在你的第二個for循環中,我相信你的意思是:

for x in i: 

這就是爲什麼你越來越0小號

有一個Counter類標準collections模塊中,這樣你就可以簡化這個:

>>> from collections import Counter 
>>> [Counter(i)[1] for i in b] 
[2, 2, 2, 2, 0, 2, 2, 1, 11, 0] 

你也可以做到這一點,而不Counter類有點更詳細:

>>> [sum(1 for x in i if x == 1) for i in b] 
[2, 2, 2, 2, 0, 2, 2, 1, 11, 0] 
+0

'如果你不介意bool被自動視爲整數,那麼'[總和(我在x中的x == 1)]就會更短。 –

+0

@Chrono Kitsune非常感謝。你如何學會如此少的代碼?它看起來像一個lamda功能,但它不是我想的。無論如何,謝謝 –

+0

@HeketavNolroc知識主要來源於探索 - 什麼是允許的,如何使用語言和圖書館儘可能簡潔地保持事物的可讀性,同時仍然可讀。令人驚訝的是,「True + True + True == 3」是一個真實的陳述,這是避免在表達式結尾處出現「if x == 1」的技巧。如果你明白列表解析就像稠密循環一樣,生成器表達式就像傳遞給'sum'函數的表達式可以像列表解析一樣迭代,這就是爲什麼它們可以傳遞給像sum這樣的函數的原因。 –

相關問題