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]
如果没有列表理解,那么如何用最少量的代码完成?
答案 0 :(得分:2)
一种方式:
new_list = [[row[0], row[2]] for row in my_list]
在这种方法中,您自己为每一行构建一个新列表,并将元素0
和2
放在那里作为元素。
答案 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')]