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

问题描述:

我感觉今晚有更多的哑巴。如果我有一个基本的多维列表:从多维数组中选择2列 - 列表理解

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] 

在这种方法你自己构建一个新的列表,每一行和你把元素02在那里为元素。

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

除了什么@Simeon维瑟写的,你也可以使用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')] 
+0

@PadraicCunningham THX。没有注意到这一点。 – Marcin 2014-12-07 07:42:05

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