[英]Vertical Slices: list indices must be integers or slices, not tuple error
我有一个二维矩阵,我想在其中切出垂直列,以便可以对其进行绘图。 为此,我想使用切片符号和for循环,以便产生所需的列。 在下面的代码中,我尝试打印出每一列,以查看切片符号是否有效。
Y_AXIS = [[1,2,3,4,5],
[2,3,4,5,6],
[3,4,5,6,7],
[4,5,6,7,8]]
for i in range(5):
print("Slice: ", Y_AXIS[:,i])
我希望代码先打印[1,2,3,4],然后再打印[2,3,4,5],依此类推。 但是,无论何时运行,编译器都会抛出错误,指出“列表索引必须是整数或切片,而不是元组”。
使用numpy:
import numpy as np
y_axis = np.array([[1,2,3,4,5],
[2,3,4,5,6],
[3,4,5,6,7],
[4,5,6,7,8]])
for i in range(5):
print(y_axis[:, i].tolist())
# output:
# Slice: [1, 2, 3, 4]
# Slice: [2, 3, 4, 5]
# Slice: [3, 4, 5, 6]
# Slice: [4, 5, 6, 7]
# Slice: [5, 6, 7, 8]
或者您可以按照@Paul Rooney的建议使用zip:
Y_AXIS = [[1,2,3,4,5],
[2,3,4,5,6],
[3,4,5,6,7],
[4,5,6,7,8]]
for i in zip(Y_AXIS):
print("Slice: ", i)
# output:
# Slice: [1, 2, 3, 4]
# Slice: [2, 3, 4, 5]
# Slice: [3, 4, 5, 6]
# Slice: [4, 5, 6, 7]
# Slice: [5, 6, 7, 8]
如果它不是一个numpy数组,则不能像这样对列表进行切片,相反,如果它是普通的python列表,则应这样做
Y_AXIS = [[1,2,3,4,5],
[2,3,4,5,6],
[3,4,5,6,7],
[4,5,6,7,8]]
print("Slice: ", [[row[i] for row in Y_AXIS] for i in range(len(Y_AXIS[0]))])
# outputs
Slice: [[1, 2, 3, 4], [2, 3, 4, 5], [3, 4, 5, 6], [4, 5, 6, 7], [5, 6, 7, 8]]
另一个聪明的方法是transpose
numpy数组。
Y_AXIS = np.array(Y_AXIS)
print(Y_AXIS.T)
[[1 2 3 4]
[2 3 4 5]
[3 4 5 6]
[4 5 6 7]
[5 6 7 8]]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.