2010-10-13 39 views
2

我有一個像[["foo", ["a", "b", "c"]], ["bar", ["a", "b", "f"]]]列表綜合列出

名單,我想將它拆分出來,所以我可以得到作爲,B等等總數的計數,但我是新來的Python並且有一點時間。

我使用[lx for lx in [li[1] for li in fieldlist if li[1]]],試圖讓所有的子子列表中的項目列表,但返回與第一子列表列表([["a", "b", "c"], ["a", "b", "f"]],而不是與子列表的內容的列表。I」 m很確定我只是想着這個錯誤,因爲我是新來的列表解析和Python。

任何人都有一個很好的方法來做到這一點?(是的,我知道我選擇的名稱(lx,li )是可怕的)

感謝

回答

5

這會給你想要的清單:

[lx for li in fieldlist for lx in li[1] if li[1]] 
+0

輝煌。我知道我必須走得很近,但我不知道你可以像這樣列出多個列表。謝謝! – tjsimmons 2010-10-13 20:16:12

0

列表理解:

>>> s = [["foo", ["a", "b", "c"]], ["bar", ["a", "b", "f"]]] 
>>> [x for y, z in s for x in z] 
['a', 'b', 'c', 'a', 'b', 'f'] 
>>> 

你是什麼if li[1]的目的是什麼?如果li[1]是一個空列表或其他容器,則測試是多餘的。否則,你應該編輯你的問題來解釋它可能是什麼。

+0

這是我打印出列表時的延期,我想跳過空列表。我沒有意識到這是多餘的。 – tjsimmons 2010-10-13 20:29:12

0

一個Python的解決辦法是這樣的:

>>> from collections import Counter 
>>> Counter(v for (field, values) in fieldlist 
...   for v in values) 
Counter({'a': 2, 'b': 2, 'c': 1, 'f': 1})