3

私の質問は単純に思えますが、私のような python の初心者にとっては、これは複雑すぎて理解できないので、状況は次のとおりです。

次のようなリストを取得する必要があります。

L = [(a, b, c), (d, e, d), (etc, etc, etc), (etc, etc, etc)]

そして、各インデックスから個別の要素を取得できるように、各インデックスを個別のリストにします。問題は、私が実際に作業しているリストには、上記のような数百のインデックスが含まれており、次のようなものを作成できないことです。

L_new = list(L['insert specific index here'])

それは、最初のリストの個々のインデックスに対応する何百ものリストでメモリがいっぱいになることを意味し、私の観点からは時間とメモリを消費しすぎます。だから私の質問はこれです.どうすればこれらのインデックスを分離し、何百もの個別のリストを作成する必要なく、それらから個々の部分を引き出すことができます.

4

3 に答える 3

3

私はあなたの質問を誤解しているかもしれませんが、タプルにインデックスを付けるために実際に何もする必要はないと言いたいです。私のコメントを参照L[0][0]してください。"a"L[0][1]"b"L[2][1]"etc"

これをリストのリストに変換するクリーンな方法が本当に必要な場合は、リスト内包表記を使用できます。

cast = [list(entry) for entry in L]

あなたのコメントに応えて: 次元を超えてアクセスしたい場合は、リストの理解をお勧めします。特にあなたのコメントについて:

crosscut = [entry[0] for entry in L]

コメント 2 への回答: これは主に、スライスと呼ばれる非常に便利な操作の一部です。特に参照された操作を行うには、次のようにします。

multiple_index = [entry[0:3] for entry in L]

読みやすさの好みに応じて、実際にはいくつかの可能性があります。

list_of_lists = []
for sublist in L:
    list_of_lists.append(list(sublist))

iterator = iter(L)
for i in range(0,iterator.__length_hint__()):
    return list(iterator.next())
    # Or yield list(iterator.next()) if you want lazy evaluation
于 2013-06-21T15:22:48.303 に答える
2

内部リストを使用する 2 つの方法:

for index, sublist in enumerate(L):
    # do something with sublist
    pass

またはイテレータを使用して

iterator = iter(L)
sublist = L.next() # <-- yields the first sublist

どちらの場合も、sublist要素には次の方法でアクセスできます

  • 直接インデックス

sublist[2]
  • 反復

iterator = iter(sublist)
iterator.next()  # <-- yields first elem of sublist

for elem in sublist:
    # do something with my elem
    pass
于 2013-06-21T15:22:22.813 に答える
2

タプルのリストがあり、リストのリストのようにアクセスします

L[3][2]

リストLの3番目のタプルから2番目の要素を取得します

于 2013-06-21T15:20:53.910 に答える