我要做的是在列表中提取第0个元素,在给定的2维列表的另一个列表中提取第一个元素。
baseball = [[180, 78.4],
[215, 102.7],
[210, 98.5],
[188, 75.2]]
x = [ a[0] for a in baseball ]
y = [ a[1] for a in baseball ]
print x
print y
这可以在单个列表理解声明中完成吗?
答案 0 :(得分:2)
假设它是矩形的(即内部列表的长度是一致的),您可以实现以下内容:
def transpose(matrix):
return [[matrix[j][i] for j in range(len(matrix))] for i in range(len(matrix[0]))]
然后,您的问题只是调用转置(x, y = transpose(baseball)
)。
答案 1 :(得分:2)
如果你不介意元组:
baseball = [[180, 78.4],
[215, 102.7],
[210, 98.5],
[188, 75.2]]
x,y = zip(*baseball)
如果你真的想要名单:
x,y = map(list,zip(*baseball))
如果每个元素中包含两个以上的元素,并且只需要某些元素,例如:
baseball = [[180, 1, 78.4],
[215, 2, 102.7],
[210, 3, 98.5],
[188, 4, 75.2]]
from operator import itemgetter
x, y = zip(*map(itemgetter(0, 2), baseball))
那会给你:
((180, 215, 210, 188), (78.4, 102.7, 98.5, 75.2))