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 回答
4

直接从 python 列表中提取一些列是不可能的,因为 python 并不将此列表视为一个数组(根据定义具有行和列),而是作为列表的列表。

但是,您可以非常轻松地执行此类操作,而无需使用任何列表推导式Numpy。具体来说,您可以执行以下操作:

import numpy as np

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

# Covert list2 to numpy array
array2 = np.array(list2)

# Extract the specific columns from array2 according to list1
newArray = array2[:, list1]

#  Convert the new numpy array to list of lists
newList = newArray.tolist()

# newList is the following list: [['abc', 'def'], ['ghi', 'wxy']]

我希望这也有帮助!

于 2018-07-01T18:00:05.573 回答
2

如果您使用的是 csv 文件,则无需重新发明轮子。看看优秀的csv模块。

于 2012-09-26T20:24:38.750 回答
1

您可以像这样将Poete Maudit 的答案放在一行中:

column = np.array(list_name)[:,column_number].tolist()

您还可以通过删除将其保留为 numpy 数组.tolist()

于 2018-08-23T14:45:05.077 回答