2012-06-04 24 views
2
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: 


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

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但我一直运行到这个标化的问题,我一直没能找到这个回答任何地方,我认为这是一个非常重要的问题。在此先感谢, 理查德

+2

您确定要在这种形式下使用'turns'吗?你在开始时创建一个简单的列表,然后向它添加新的列表,所以它看起来几乎像2D,但不完全。 – eumiro

+0

欢迎来到SO @Richard! – invert

回答

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(…) 
+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]] 

正如你所看到的,矩阵只不过是列表的列表。你并没有首先建立矩阵 - 第一行也有也是一个列表。

+0

谢谢,这真的有帮助,它解决了问题,我从来没有想过开始是整数,后来的pars是列表。非常感谢!! –

+0

@ user1434957如果这个答案对你有帮助,请接受它是正确的(点击左边的复选标记) –

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

是的,真棒,谢谢,谢谢 –

+0

如果你认为答案是有用的给我的答案upvote并接受它 – shiva

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

是的,它的工作!谢谢 –