提取2D列表的第一列以及单行中的索引

Vur*_*gan 0 python list-comprehension list

你如何将这两个列表理解缩短为一行?我想编码为一行.我的方式似乎太长了.我觉得还有另一种方法来编码它.

y = [array[i][0] for i in range(len(array))]
x = [i for i in range(len(array))]

x, y = [i for i in range(len(array))], [array[i][0] for i in range(len(array))]
Run Code Online (Sandbox Code Playgroud)

cs9*_*s95 6

假设您想要提取2D列表的第一列及其索引,您将使用enumeratezip解包:

array = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
x, y = zip(*enumerate([r[0] for r in array]))
Run Code Online (Sandbox Code Playgroud)

print(x)
(0, 1, 2)

print(y)
(1, 4, 7)
Run Code Online (Sandbox Code Playgroud)

x是索引,y是行向量.如上所示,此方法导致您的数据被提取为tuples(非lists),并且在array空时将失败.

因此,正如@ user2357112在评论中所说,请不要努力将所有代码推到一行 - 只有在可以完成时才这样做,并且这样做是有道理的.

此外,为了在评论中扩展讨论,最好的方法是遵循@Rakesh在他们的答案中所示的两步法:

x = list(range(len(array)))
y = [r[0] for r in array]
Run Code Online (Sandbox Code Playgroud)

print(x)
[0, 1, 2]

print(y)
[1, 4, 7]
Run Code Online (Sandbox Code Playgroud)

这不会受到上述缺点的影响.