2012-10-24 79 views
1

我有一個列表,分別包含一個人的姓名,年齡和身份證。 我想計算列表中給定id的出現次數。Python計數發生返回0

當我嘗試:

alist=[(('john', 37), 8),(('john', 37), 8)] 

count_ID=alist.count(8) 
print count_ID 

我收到:

count_ID returns 0 

我希望它在這個例子中返回2,因爲列表中有2項具有ID = 8。我怎樣才能解決這個問題?

回答

2

嘗試此代替:

alist = [ (('john', 37), 8), (('john', 37), 8) ] 
sum(1 for x in alist if x[1] == 8) 

你必須指定某種方式使id字段存在如在元組中的第二元件,然後篩選出只與id == 8那些元組和最後總結1爲每一個該被發現 - 或者我們可以找出結果列表的長度,但是爲什麼當一個發生器足夠時創建一個臨時列表?

正如在評論中指出,這也適用:

sum(x[1] == 8 for x in alist) 

上面的代碼中工作,因爲在比較x[1] == 8一個True值計算結果爲1False計算結果爲0

+0

或者只是'總和(X [1] == 0在ALIST X )'。 – lvc

+0

@lvc謝謝,我更新了我的回答 –

+0

謝謝,你們都是對的! –

2

alist.count(8)只會工作,如果8是的alist元素:

>>> alist = [(('john', 37), 8),(('john', 37), 8)] 
>>> 8 in alist 
False 

8,但是,是列表的第一個元素的元素:

>>> 8 in alist[0] 
True 

如此算數您必須檢查8是否在alist的每個元素中:

>>> sum(i[1] == 8 for i in alist) 
2 
2

該列表必須扁平。 Python不計算嵌套列表。所以它會是:

alist=[(('john', 37), 8),(('john', 37), 8),8,8] 

爲Python返回2

這裏是ways到flattern列表