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

时间:2014-12-07 01:24:21

标签: 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 row in my_list]

但我怎么才抓住第1列和第3列?

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

如果没有列表理解,那么如何用最少量的代码完成?

4 个答案:

答案 0 :(得分:2)

一种方式:

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

在这种方法中,您自己为每一行构建一个新列表,并将元素02放在那里作为元素。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

虽然您当然可以使用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]

答案 3 :(得分:0)

除了@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')]