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)
假设您想要提取2D列表的第一列及其索引,您将使用enumerate逆zip解包:
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)
这不会受到上述缺点的影响.