2012-09-26 61 views
2

我有一個列表Python-提取特定的列包含列索引如下:從列表

list1 = [0 ,2] 

列表的另一個列表將包含一個CSV文件的文件內容如下:

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

什麼可以創建一個新的列表,將只從list2與包含在list1

列號包含的值的最佳方式0

我有一個很難創建子列表

+1

你可能告訴過我們你試過的東西,至少在僞代碼中(因此-1)。 –

回答

7

您可以使用List Comprehension: -

newList = [[each_list[i] for i in list1] for each_list in list2] 
+0

這似乎不是OP想要的。給定'list1'中的列[0,2],newList應包含'list2'中每行的列。 – DSM

+0

好吧..我誤解了.. –

+0

更正了代碼以獲得所需的輸出.. –

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']] 
2

如果您正在使用CSV文件時,你不需要重新發明輪子。 看看優秀的csv模塊。

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可能與嵌套列表理解相比略有性能優勢,但它可能足夠小,不值得擔心。