你如何在Python中评估数组的某个部分?

时间:2012-06-04 10:58:31

标签: python arrays

turns = [4, 6, 2, 8, 1, 9, 5, 5, 3, 7, 6, 8, 2, 4]
turns.append([1, 1, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4])
turns.append([4, 6, 2, 8, 1, 9, 6, 5, 3, 7, 6, 8, 2, 4]) 
turns.append([0, 0, 26, 24, 3, 7, 5, 4, 25, 25, 21, 21, 21, 21])
turns.append([0, 0, 0, 0, 7, 3, 8, 2, 0, 0, 29, 29, 29, 29])
turns.append([0, 0, 0, 0, 26, 24, 0, 0, 0, 0, 0, 0, 0, 0])

arrayValue = turns[j][i]
    if arrayValue == turnCurrently:


Error Message:
Traceback (most recent call last):
  File "D:/a45d32f947055690c690d94f88/TicTacToe", line 183, in <module>
    arrayValue = turns[j][i]
TypeError: 'int' object is not subscriptable

我的问题基本上是,我想测试turns[j][i]是否等于turnCurrently,但我一直遇到这个可订阅的问题,我无法在任何地方找到答案这是一个非常重要的问题。提前致谢, 理查德

4 个答案:

答案 0 :(得分:6)

尝试使用此方法构建转弯的二维数组(“矩阵”):

turns = [[4, 6, 2, 8, 1, 9, 5, 5, 3, 7, 6, 8, 2, 4]]
turns.append([1, 1, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4])
turns.append([4, 6, 2, 8, 1, 9, 6, 5, 3, 7, 6, 8, 2, 4]) 
turns.append([0, 0, 26, 24, 3, 7, 5, 4, 25, 25, 21, 21, 21, 21])
turns.append([0, 0, 0, 0, 7, 3, 8, 2, 0, 0, 29, 29, 29, 29])
turns.append([0, 0, 0, 0, 26, 24, 0, 0, 0, 0, 0, 0, 0, 0])

或者只是这个:

turns = [[4, 6, 2, 8, 1, 9, 5, 5, 3, 7, 6, 8, 2, 4],
         [1, 1, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4],
         [4, 6, 2, 8, 1, 9, 6, 5, 3, 7, 6, 8, 2, 4],
         [0, 0, 26, 24, 3, 7, 5, 4, 25, 25, 21, 21, 21, 21],
         [0, 0, 0, 0, 7, 3, 8, 2, 0, 0, 29, 29, 29, 29],
         [0, 0, 0, 0, 26, 24, 0, 0, 0, 0, 0, 0, 0, 0]]

如您所见,矩阵只不过是一个列表列表。您没有首先构建矩阵 - 第一行 也是一个列表。

答案 1 :(得分:2)

你的阵列有一个奇怪的布局。前14个元素是整数,然后是几个其他数组。

所以你基本上拥有的是:

[4, 6, 2, ..., 2, 4, [1, 1, 2, ...], [4, 6, ...], ...]

您可以通过将第一个作业更改为:

来解决此问题
turns = [[4, 6, 2, 8, 1, 9, 5, 5, 3, 7, 6, 8, 2, 4]]

答案 2 :(得分:2)

打印出变量的内容通常会有很大帮助,看看它发生了什么:

>>> turns
[4, 6, 2, 8, 1, 9, 5, 5, 3, 7, 6, 8, 2, 4, [1, 1, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4], [0, 0, 26, 24, 3, 7, 5, 4, 25, 25, 21, 21, 21, 21], [0, 0, 0, 0, 7, 3, 8, 2, 0, 0, 29, 29, 29, 29], [0, 0, 0, 0, 26, 24, 0, 0, 0, 0, 0, 0, 0, 0]]

如您所见,该列表的前几个元素是简单整数,但不是整数列表。因此,当j很小时,它会选择int并尝试在其上应用[i] - 这会失败。

这种情况下的解决方案是将第一个元素放入一个额外的列表中:

turns = [[4, 6, 2, 8, 1, 9, 5, 5, 3, 7, 6, 8, 2, 4]]
turns.append( … )

另一种方法是将列表初始化为空列表,并附加第一个子列表:

turns = []
turns.append([4, 6, 2, 8, 1, 9, 5, 5, 3, 7, 6, 8, 2, 4])
turns.append( … )

答案 3 :(得分:1)

turns = [4, 6, 2, 8, 1, 9, 5, 5, 3, 7, 6, 8, 2, 4]更改为

turns = [[4, 6, 2, 8, 1, 9, 5, 5, 3, 7, 6, 8, 2, 4]]