从多维数组中选择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]
在这种方法你自己构建一个新的列表,每一行和你把元素0
和2
在那里为元素。
答
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')]
答
虽然你当然可以使用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]
@PadraicCunningham THX。没有注意到这一点。 – Marcin 2014-12-07 07:42:05