【问题标题】:Python 2D Array list indices must be integers or slices, not tuplePython 2D 数组列表索引必须是整数或切片,而不是元组
【发布时间】:2021-02-18 15:10:20
【问题描述】:

我正在尝试学习 Python 2D 数组,我正在尝试添加一个空数组,但收到错误 list indices must be integers or slices, not tuple

我用 Java 编写了我想做的事情,并试图将其翻译成 Python

我的 Java 代码:

Object[][] memoryArray = new Object[256][17];

        int memoryRow, memoryCol;
        int MBR = 12;
        int addr = MBR;
        memoryRow = addr / 16;
        memoryCol = addr % 16 + 1;
        memoryArray[memoryRow][memoryCol] = " "+Integer.toString(MBR);
        for (Object element: memoryArray) {
            System.out.println(element);
     }

我的 Python 代码:

memArray = [[None], [None]]
MBR = 55
address = MBR 
memR = (address / 16)
memC = (address % 16 + 1)
memArray[[memR], [memC]] = " " + str(MBR)

如果有人可以指导我如何在 Python 中正确实现这个逻辑?我不确定错误试图表明什么。

我还想知道使用 Numpy 数组是否会更好?

【问题讨论】:

标签: python arrays list numpy tuples


【解决方案1】:

Java 新手也在这里,但让我们一起尝试翻译:

memArray = [[None], [None]]

不是 Python 的等价物

Object[][] memoryArray = new Object[256][17];

改为:

memArray = [[None for _ in range(17)] for _ in range(256)]

# Java
memoryArray[memoryRow][memoryCol] = " "+Integer.toString(MBR);

直接翻译成:

memArray[memR][memC] = " " + str(MBR)

最后,虽然 Numpy 数组可能有助于对 Python 列表进行高级索引,但如果您使用的是字符串/对象,则计算效率不会有太大提高。

【讨论】:

  • 您对memArray = [[None for _ in 17] for _ in 256] 的建议给了我一个错误TypeError: 'int' object is not iterable
  • @HotWheels(脸红的图标)对不起,有时我犯了那个愚蠢的错误。查看更新的答案。
  • 这是一个很好的答案,我没有意识到 Python 中 range 关键字的重要性。
【解决方案2】:

我认为你想要的是 memArray[memR][memC] = " " + str(MBR),但它的方式是行不通的,因为 1)你必须确保 memR 是整数,2)因为你的列表是空的

【讨论】:

  • memR 不确保为整数,因为它需要一个整数地址/16 并存储它?我认为它这样做是因为 Python 中没有类型声明,至少据我所知。
  • 在 python 2 中如果地址是整数,memR 将是整数,但在 python 3 中它将是一个浮点数,除非你使用 int(address / 16)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-02-27
  • 1970-01-01
  • 1970-01-01
  • 2017-10-02
  • 2019-09-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多