10

次のような列インデックスを含むリストがあります。

list1 = [0 ,2]

リストの別のリストには、次のようにcsvファイルのファイルの内容が含まれます。

list2=[["abc", 1, "def"], ["ghi", 2, "wxy"]]

ielist2に含まれている列番号の値のみを含む新しいリストを作成するための最良の方法は何でしょうか。list1

newList = [["abc", "def"], ["ghi", "wxy"]]

サブリストを作成するのに苦労しています

4

6 に答える 6

13

あなたが使用することができますList Comprehension: -

newList = [[each_list[i] for i in list1] for each_list in list2]
于 2012-09-26T20:24:43.083 に答える
8

タプルのリストに満足している場合は、次を使用できますoperator.itemgetter

import operator
list1 = [0,2]
my_items = operator.itemgetter(*list1)
new_list = [ my_items(x) for x in list2 ]

(またはここで使用できmapます):

new_list = map(my_items, list2)

そして1ライナーとして:

new_list = map(operator.itemgetter(*list1), list2)

operator.itemgetterネストされたリスト内包表記よりもパフォーマンスがわずかに優れている可能性がありますが、心配する価値がないほど小さい可能性があります。

于 2012-09-26T20:28:23.023 に答える
7
>>> list1 = [0 ,2]
>>> list2=[["abc", 1, "def"], ["ghi", 2, "wxy"]]
>>> newList = [[l[i] for i in list1] for l in list2]
>>> print newList
[['abc', 'def'], ['ghi', 'wxy']]
于 2012-09-26T20:23:36.460 に答える
2

csv ファイルで作業している場合は、一からやり直す必要はありません。優れたcsvモジュールをご覧ください。

于 2012-09-26T20:24:38.750 に答える