Python 类型错误:';int';对象不可下标

Python 类型错误:';int';对象不可下标,python,python-2.7,for-loop,Python,Python 2.7,For Loop,我找过其他类似的案例,但没有一个完全适用于我。。。。如果他们这样做了,我不明白怎么做 我尝试通过2D数组进行过滤(如下所示): 并找出当前部分是什么。抱歉,如果我的代码有点草率,我是python新手。这是我代码的一部分 def drawBlock(): for blockL1 in blocks: for blokL2 in blocks: if blocks[blockL1[blockL2[1]]] == 0: pygame.draw.rect(

我找过其他类似的案例,但没有一个完全适用于我。。。。如果他们这样做了,我不明白怎么做

我尝试通过2D数组进行过滤(如下所示):

并找出当前部分是什么。抱歉,如果我的代码有点草率,我是python新手。这是我代码的一部分

def drawBlock():
for blockL1 in blocks:
    for blokL2 in blocks:
        if blocks[blockL1[blockL2[1]]] == 0:
            pygame.draw.rect(screen, (0, 255, 255), Rect((blockL1 * 32, blockL2 *32), (32, 32)))
            pygame.draw.rect(screen, color, Rect(i * 32, ))
        global blockL2
        blockL2 += 1
    global blockL1
    blockL1 += 1

你这里有几个问题

主要问题是您使用
进行压边圈中的压边

当你写作时

for blockL1 in blocks:
for blockL1 in blocks:
    for blockL2 in blocks:
这几乎和写作一样

for ii in range(len(blocks)):
    blockL1 = blocks[ii]
    ...
这意味着blockL1不是整数,也不是块的索引。。它是块的一个元素

它的值如下所示:
[[0]、[0]、[0]、[0]、[0]、[0]、[0]、[0]、[0]、[0]]

这是一个列表。。。其中as
blocks
是包含列表的列表列表。。。嗯

当你写作时

for blockL1 in blocks:
for blockL1 in blocks:
    for blockL2 in blocks:
blockL2
的值将是单个列表
[0]

假设要查看
blockL2
中包含的一个值,可以更改:

if blocks[blockL1[blockL2[1]]] == 0:
致:

但是,这段代码看起来需要
blockL1
blockL2
的索引值,因此我建议您遍历它们的索引列表(意思是
ints
)。。。不是他们的元素

def drawBlock():
    for blockL1 in range(len(blocks)):
        for blockL2 in range(len(blockL1)):
            if blocks[blockL1[blockL2[0]]] == 0:
                pygame.draw.rect(screen, (0, 255, 255), Rect((blockL1 * 32, blockL2 *32), (32, 32)))

希望这能帮助一些人

块实际上是一个三维数组。移除每个
0
周围的
[]
。谢谢!这其实是有道理的!我很感激你能帮助我,因为我学到的第一种循环是javascript风格,这使得我很难想象使用不同的风格。所以你建议我使用底部的代码?谢谢@等等,这真的取决于你的风格,。。但是如果逻辑需要知道当前块在主数组中的位置,我建议使用底部。