Python 从多维数组-列表中选择2列

Python 从多维数组-列表中选择2列,python,multidimensional-array,list-comprehension,Python,Multidimensional Array,List Comprehension,今晚我觉得自己特别笨。如果我有一个基本的多维列表: my_list = [['Bob', 43, 'Tall', 'Green'], ['Sally', 32, 'Short', 'Blue'], ['Tom', 54,'Medium','Orange']] 我可以轻松地使用列表理解来获取第一列: new_list = [row[0] for row in my_list] 或者我可以抓取3列: new_list = [row[0:3] for r

今晚我觉得自己特别笨。如果我有一个基本的多维列表:

my_list = [['Bob', 43, 'Tall', 'Green'],
           ['Sally', 32, 'Short', 'Blue'],
           ['Tom', 54,'Medium','Orange']]
我可以轻松地使用列表理解来获取第一列:

new_list = [row[0] for row in my_list]
或者我可以抓取3列:

new_list = [row[0:3] for row in my_list]
但是我如何只获取第1列和第3列呢

new_list = [row[0,2] for row in my_list]
如果没有列表理解,那么如何用最少的代码完成

new_list = [[row[0], row[2]] for row in my_list]
在这种方法中,您自己为每一行构建一个新列表,并将元素
0
2
作为元素放入其中。

单向:

new_list = [[row[0], row[2]] for row in my_list]
import operator

In [7]: answer = [operator.itemgetter(0,2)(s) for s in my_list]

In [8]: answer
Out[8]: [('Bob', 'Tall'), ('Sally', 'Short'), ('Tom', 'Medium')]

在这种方法中,您自己为每一行构建一个新列表,并将元素
0
2
作为元素放入其中。

除了@Simeon Visser编写的内容之外,您还可以使用itemgetter:

import operator

In [7]: answer = [operator.itemgetter(0,2)(s) for s in my_list]

In [8]: answer
Out[8]: [('Bob', 'Tall'), ('Sally', 'Short'), ('Tom', 'Medium')]
my_list = [['Bob', 43, 'Tall', 'Green'],
           ['Sally', 32, 'Short', 'Blue'],
           ['Tom', 54,'Medium','Orange']]

from operator import itemgetter

itg = itemgetter(0,2)

print([itg(row) for row in my_list])
给出:

[('Bob', 'Tall'), ('Sally', 'Short'), ('Tom', 'Medium')]

除了@Simeon Visser编写的内容外,您还可以使用itemgetter:

my_list = [['Bob', 43, 'Tall', 'Green'],
           ['Sally', 32, 'Short', 'Blue'],
           ['Tom', 54,'Medium','Orange']]

from operator import itemgetter

itg = itemgetter(0,2)

print([itg(row) for row in my_list])
给出:

[('Bob', 'Tall'), ('Sally', 'Short'), ('Tom', 'Medium')]

虽然您当然可以使用
itemgetter
,但您不需要将其分配给变量,也不需要完全限定其名称:

from operator import itemgetter
[itemgetter(0,2)(row) for row in my_list]
您也可以做
itemgetter
所做的事情,在本例中,这意味着列表理解中有一个嵌套的列表理解:

[[row[i] for i in [0,2]] for row in my_list]

虽然您当然可以使用
itemgetter
,但您不需要将其分配给变量,也不需要完全限定其名称:

from operator import itemgetter
[itemgetter(0,2)(row) for row in my_list]
您也可以做
itemgetter
所做的事情,在本例中,这意味着列表理解中有一个嵌套的列表理解:

[[row[i] for i in [0,2]] for row in my_list]

@帕德雷坎宁厄姆Thx。我没注意到。@PadraicCunningham Thx。我没注意到。