你如何将这两个列表理解缩短为一行?我想编码为一行。我的方式似乎太长了。我觉得还有另一种编码方式。
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))]
答案 0 :(得分:6)
假设您想要提取2D列表的第一列及其索引,您可以使用enumerate
反向 - zip
解包:
array = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
x, y = zip(*enumerate([r[0] for r in array]))
print(x)
(0, 1, 2)
print(y)
(1, 4, 7)
x
是索引,y
是行向量。如上所示,此方法会导致您的数据被提取为 tuple
s (而非list
s),并且在array
为空时会失败。
所以,正如@ user2357112在他们comment中所说的那样,请不要努力将所有你的代码推到一行 - 只有当它可以完成时才会这样做这样做的意义。
此外,为了扩展评论中的讨论,最好的方法是遵循@Rakesh在answer中所示的两步法:
x = list(range(len(array)))
y = [r[0] for r in array]
print(x)
[0, 1, 2]
print(y)
[1, 4, 7]
这并没有上述缺点。
答案 1 :(得分:2)
这应该有帮助
x = range(len(array)) #range returns list
y = [i[0] for i in array] #you can access the element in the list without range or len
答案 2 :(得分:0)
x, y = list(map(list, zip(*[(i, r[0]) for i, r in enumerate(a)]))) or ([], [])
免责声明:我认为这是一种情况,因为单行是一件坏事。