嵌套列表中的列表理解

时间:2010-10-13 20:04:02

标签: python list-comprehension nested-lists

我有一个像[["foo", ["a", "b", "c"]], ["bar", ["a", "b", "f"]]]

这样的列表

而且我想将它拆分出来以便我可以计算出As,Bs等的总数。但我是Python的新手并且有点时间。

我正在使用[lx for lx in [li[1] for li in fieldlist if li[1]]]尝试获取包含子子列表中所有项目的列表,但是会返回包含第一个子列表的列表([["a", "b", "c"], ["a", "b", "f"]]而不是包含该列表的列表这些子列表的内容。我很确定我只是想到这个错误,因为我是列表理解和Python的新手。

任何人都有一个很好的方法来做到这一点? (是的,我知道我选择的名字(lx,li)太可怕了)

感谢。

3 个答案:

答案 0 :(得分:5)

这将为您提供所需的列表:

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

答案 1 :(得分: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]是空列表或其他容器,则测试是多余的。否则你应该编辑你的问题来解释它可能是什么。

答案 2 :(得分:0)

Pythonic解决方案就像:

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