2010-10-13 64 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})