2

私は次のようなリストを持っています[["foo", ["a", "b", "c"]], ["bar", ["a", "b", "f"]]]

As、Bなどの総数を取得できるように分割したいのですが、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 に答える