Python:这可以在单个列表理解语句中完成

时间:2016-08-04 16:31:07

标签: python list-comprehension

我要做的是在列表中提取第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

这可以在单个列表理解声明中完成吗?

2 个答案:

答案 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))