6

タプルを含むネストされたリストを持つリストがあります。リストは次のようになります。

428 [(' whether', None), (' mated', None), (' rooster', None), ('', None)]
429 [(' produced', None), (' without', None), (' rooster', None), (' infertile', None), ('', None)]

インデックス値ごとに、タプルの「なし」要素にアクセスできるようにしたいと思います。次のような同じインデックス値を持つ新しいリストを作成したいと思います。

428 [(None, None, None, None)]
429 [(None, None, None, None, None)]

「None」がどのタイプにあるかはあまり気にしません。それらを別のリストにしたいだけです。

リスト内包表記を試しましたが、内部の要素ではなく、タプル自体しか取得できません。

どんな助けでも大歓迎です。

4

6 に答える 6

10

タプルを含む単一のリストの最も単純な例は次のとおりです。

[x[1] for x in myList]
# [None, None, None, None]

または、常にタプルの最後の値である場合 (2 つ以上の値が含まれている場合):

[x[-1] for x in myList]
# [None, None, None, None]

以下の例では、ネストされたリストを使用していることに注意してください。タプルを含むリストのリストです。リストの2つのバリエーションを表示していたので、それがあなたが探していたものだと思いました.

ネストされた内包リストを使用します。

myList =[ [(' whether', None), (' mated', None), (' rooster', None), ('', None)] ,
          [(' produced', None), (' without', None), (' rooster', None), (' infertile', None), ('', None)] ]


print [[x[1] for x in el] for el in myList]
# [[None, None, None, None], [None, None, None, None, None]]

またはいくつかの他のバリエーション:

myList =[ [(None, None), (' mated', None), (' rooster', None), ('', None)] ,
              [(' produced', None), (' without', None), (' rooster', None), (' infertile', None), ('', None)] ]

# If there are multiple none values (if the tuple isn't always just two values)
print [ [ [ x for x in z if x == None] for z in el ] for el in myList ]
# [[[None, None], [None], [None], [None]], [[None], [None], [None], [None], [None]]]

# If it's always the last value in the tuple
print [[x[-1] for x in el] for el in myList]
# [[None, None, None, None], [None, None, None, None, None]]

参照: SO: ネストされたリスト内包表記について

于 2013-02-13T22:27:39.480 に答える
6

リストの要素を使用する場合と同じ方法で、タプル内の要素をアドレス指定できます。つまり、インデックスを使用します。例えば:

lst = [1, (2, 3)]
lst[1][1] # first index accesses tuple, second index element inside tuple
=> 3
于 2013-02-13T22:22:08.017 に答える
0

zip を * と共に使用して、リストを引数に展開します。

x = [(' whether', None), (' mated', None), (' rooster', None), ('', None)]
stuff, nones = zip(*x)
# prints: stuff
#(' whether', ' mated', ' rooster', '')
print nones
# prints: (None, None, None, None)

zip は、一連のリストを取得し、すべての引数の最初の要素をリストにし、2 番目の引数をリストにすることで機能します。

アスタリスク (*) はリストを展開するので、zip(*x) を zip(x[0],x[1], x[2],...x[n]) と想像できます。

于 2013-02-13T23:04:05.283 に答える
0

Noneタプルに存在するかどうかを取得したい場合:

tuple([None for t in list if None in t])

これは、それが含まれている各タプルを含むタプルを再作成します。合計で の数Noneが必要な場合、これは良い解決策ではないことに注意してください。None

于 2013-02-13T22:26:18.620 に答える
0

あなたが示したものは実際にはリストではなく、実際のリストが何であるかを推測するのは困難です. しかし、私はそれが次のようなものであると仮定します:

list_o_lists = [428,
 [(' whether', None), (' mated', None), (' rooster', None), ('', None)],
 429,
 [(' produced', None),
  (' without', None),
  (' rooster', None),
  (' infertile', None),
  ('', None)]]

その中のタプルにアクセスするためのリスト内包表記は、すでにかなり恐ろしいものになっています。

[[tup for tup in lst] if is_sequence(lst) else lst for lst in list_o_lists]

しかし、各タプルの 2 番目の要素にアクセスするように変更するのは簡単です。

[[tup[1] for tup in lst] if is_sequence(lst) else lst for lst in list_o_lists]

本当に、あなたのリスト内包表記が何であれ、それがどんなに恐ろしいものであっても、あなたの質問に基づいて、どこかに各タプルを式として持っています。つまり、あなたがしなければならないことは、[1]その式に


あなたのコメントから:

すみません、数字は指標値です。

実際にはもっと簡単なものがあると思います:

list_o_lists = [
 [(' whether', None), (' mated', None), (' rooster', None), ('', None)],
 [(' produced', None),
  (' without', None),
  (' rooster', None),
  (' infertile', None),
  ('', None)]]

そして、あなたが試みたリスト内包表記は、おそらく次のようなものでした:

[[tup for tup in lst] for lst in list_o_lists]

もちろん、これは推測にすぎません。実際のリストや、試したリスト内包表記をまだ示していないからです。しかし、上で述べたように、「…リスト内包表記がどうであれ…どこかで各タプルを式として持っているので、[1]その式に を付けるだけで済みます。」

したがって、これは上記のものと同じくらい簡単に変更できます。

[[tup[1] for tup in lst] for lst in list_o_lists]

そして、それがあなたが実際に持っているものではない場合、あなたが実際に持っているもの同じように簡単に変えることができます. しかし、実際のコードを目の前にしながら、あなたの心を読み取ろうとする試みは何度も失敗してきたため、自分で行う必要があります。

于 2013-02-13T22:26:39.237 に答える
0

428 と 429 は、リストにないインデックスだと思います。

だから、質問を考えると

li = [[(' whether', None), (' mated', None),
       (' rooster', None), ('', None)],

      [(' produced', None), (' without', None),
       (' rooster', None), (' infertile', None),
       ('', None)]

      ]


print [ [len(subli)*(None,)] for subli in li]

仕事をします。

[[(None, None, None, None)], [(None, None, None, None, None)]]

あなたの質問は奇妙です。そのようなデータは何に使用されますか?

于 2013-02-14T00:07:08.387 に答える