2

我有一个类似的清单[["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)很可怕)

谢谢。

4

3 回答 3

5

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

[lx for li in fieldlist for lx in li[1] if li[1]]
于 2010-10-13T20:10:05.350 回答
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]是空列表或其他容器,则测试是多余的。否则,您应该编辑您的问题以解释它可能是什么。

于 2010-10-13T20:19:01.823 回答
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})
于 2010-10-13T20:25:18.603 回答