垂直切片:列表索引必须是整数或切片,而不是元组错误



我有一个二维矩阵,我想在其中切下垂直列,以便我可以绘制它们。为此,我想使用slice符号和a循环,以便我可以生产所需的列。在下面的代码中,我尝试打印每列以查看切片符号是否可以工作。

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]

或者您可以将zip用作@paul Rooney建议:

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]]

最新更新