List 如果不是元组,则无法访问列表元素

List 如果不是元组,则无法访问列表元素,list,python-2.7,tuples,element,List,Python 2.7,Tuples,Element,出于某种模糊的原因,我可以访问元组的元素,但如果它是一个列表,我就无法访问 def __init__(self, collider, x, y, gridKeys, tilesetGids, collisionGids): self.gridKeys = gridKeys self.gids = tilesetGids for i in self.gridKeys: if ((i[0][0] == x) and (i[0][1] == y)):

出于某种模糊的原因,我可以访问元组的元素,但如果它是一个列表,我就无法访问

def __init__(self, collider, x, y, gridKeys, tilesetGids, collisionGids):

    self.gridKeys = gridKeys
    self.gids = tilesetGids
    for i in self.gridKeys:
        if ((i[0][0] == x) and (i[0][1] == y)):
            print i
参数gridKeys是一个元组列表,其中有两个元素,第一个是另一个元组,第二个是字符串。以下是网格:

[((0, 0), '1'), ((0, 1), '1'), ((0, 2), '1'), ((0, 3), '1'), ((0, 4), '1'), ((0, 5), '1'), ((0, 6), '1'), ((0, 7), '1'), ((0, 8), '1'), ((0, 9), '1'), ((1, 0), '1'), ((1, 1), '0'), ((1, 2), '0'), ((1, 3), '0'), ((1, 4), '1'), ((1, 5), '1'), ((1, 6), '0'), ((1, 7), '0'), ((1, 8), '0'), ((1, 9), '1'), ((2, 0), '1'), ((2, 1), '0'), ((2, 2), '0'), ((2, 3), '0'), ((2, 4), '0'), ((2, 5), '0'), ((2, 6), '0'), ((2, 7), '0'), ((2, 8), '0'), ((2, 9), '1'), ((3, 0), '1'), ((3, 1), '0'), ((3, 2), '0'), ((3, 3), '0'), ((3, 4), '0'), ((3, 5), '0'), ((3, 6), '0'), ((3, 7), '0'), ((3, 8), '0'), ((3, 9), '1'), ((4, 0), '1'), ((4, 1), '0'), ((4, 2), '0'), ((4, 3), '0'), ((4, 4), '0'), ((4, 5), '0'), ((4, 6), '0'), ((4, 7), '0'), ((4, 8), '0'), ((4, 9), '1'), ((5, 0), '1'), ((5, 1), '3'), ((5, 2), '0'), ((5, 3), '0'), ((5, 4), '0'), ((5, 5), '0'), ((5, 6), '0'), ((5, 7), '0'), ((5, 8), '0'), ((5, 9), '1'), ((6, 0), '1'), ((6, 1), '1'), ((6, 2), '1'), ((6, 3), '1'), ((6, 4), '0'), ((6, 5), '0'), ((6, 6), '0'), ((6, 7), '0'), ((6, 8), '4'), ((6, 9), '1'), ((7, 0), '1'), ((7, 1), '0'), ((7, 2), '0'), ((7, 3), '0'), ((7, 4), '0'), ((7, 5), '0'), ((7, 6), '0'), ((7, 7), '1'), ((7, 8), '1'), ((7, 9), '1'), ((8, 0), '1'), ((8, 1), '0'), ((8, 2), '0'), ((8, 3), '0'), ((8, 4), '0'), ((8, 5), '0'), ((8, 6), '0'), ((8, 7), '1'), ((8, 8), '1'), ((8, 9), '1'), ((9, 0), '1'), ((9, 1), '1'), ((9, 2), '1'), ((9, 3), '1'), ((9, 4), '1'), ((9, 5), '1'), ((9, 6), '1'), ((9, 7), '1'), ((9, 8), '1'), ((9, 9), '1')]
[[(0, 0), '1'], [(0, 1), '1'], [(0, 2), '1'], [(0, 3), '1'], [(0, 4), '1'], [(0, 5), '1'], [(0, 6), '1'], [(0, 7), '1'], [(0, 8), '1'], [(0, 9), '1'], [(1, 0), '1'], [(1, 1), '0'], [(1, 2), '0'], [(1, 3), '0'], [(1, 4), '1'], [(1, 5), '1'], [(1, 6), '0'], [(1, 7), '0'], [(1, 8), '0'], [(1, 9), '1'], [(2, 0), '1'], [(2, 1), '0'], [(2, 2), '0'], [(2, 3), '0'], [(2, 4), '0'], [(2, 5), '0'], [(2, 6), '0'], [(2, 7), '0'], [(2, 8), '0'], [(2, 9), '1'], [(3, 0), '1'], [(3, 1), '0'], [(3, 2), '0'], [(3, 3), '0'], [(3, 4), '0'], [(3, 5), '0'], [(3, 6), '0'], [(3, 7), '0'], [(3, 8), '0'], [(3, 9), '1'], [(4, 0), '1'], [(4, 1), '0'], [(4, 2), '0'], [(4, 3), '0'], [(4, 4), '0'], [(4, 5), '0'], [(4, 6), '0'], [(4, 7), '0'], [(4, 8), '0'], [(4, 9), '1'], [(5, 0), '1'], [(5, 1), '3'], [(5, 2), '0'], [(5, 3), '0'], [(5, 4), '0'], [(5, 5), '0'], [(5, 6), '0'], [(5, 7), '0'], [(5, 8), '0'], [(5, 9), '1'], [(6, 0), '1'], [(6, 1), '1'], [(6, 2), '1'], [(6, 3), '1'], [(6, 4), '0'], [(6, 5), '0'], [(6, 6), '0'], [(6, 7), '0'], [(6, 8), '4'], [(6, 9), '1'], [(7, 0), '1'], [(7, 1), '0'], [(7, 2), '0'], [(7, 3), '0'], [(7, 4), '0'], [(7, 5), '0'], [(7, 6), '0'], [(7, 7), '1'], [(7, 8), '1'], [(7, 9), '1'], [(8, 0), '1'], [(8, 1), '0'], [(8, 2), '0'], [(8, 3), '0'], [(8, 4), '0'], [(8, 5), '0'], [(8, 6), '0'], [(8, 7), '1'], [(8, 8), '1'], [(8, 9), '1'], [(9, 0), '1'], [(9, 1), '1'], [(9, 2), '1'], [(9, 3), '1'], [(9, 4), '1'], [(9, 5), '1'], [(9, 6), '1'], [(9, 7), '1'], [(9, 8), '1'], [(9, 9), '1']]
正如您在上面的迭代中所看到的,我测试每个外部元组中每个内部元组的第一个和第二个元素是否等于x和y参数。如果为真,则打印整个外部元组:

((2, 3), '0') # I've passed a 2 for the x argument and a 3 for the y argument.
现在,由于一些模糊的原因,如果我将每个外部元组转换为一个列表,我将无法访问元素:

def __init__(self, collider, x, y, gridKeys, tilesetGids, collisionGids):

    self.gridKeys = [list(x) for x in gridKeys] # Converting each tuple to a mutable sequence.
    self.gids = tilesetGids
    for i in self.gridKeys:
        if ((i[0][0] == x) and (i[0][1] == y)):
            print i
这个没有输出。由于某种原因,结果不是真的,但是,如果我打印转换的网格键:

[((0, 0), '1'), ((0, 1), '1'), ((0, 2), '1'), ((0, 3), '1'), ((0, 4), '1'), ((0, 5), '1'), ((0, 6), '1'), ((0, 7), '1'), ((0, 8), '1'), ((0, 9), '1'), ((1, 0), '1'), ((1, 1), '0'), ((1, 2), '0'), ((1, 3), '0'), ((1, 4), '1'), ((1, 5), '1'), ((1, 6), '0'), ((1, 7), '0'), ((1, 8), '0'), ((1, 9), '1'), ((2, 0), '1'), ((2, 1), '0'), ((2, 2), '0'), ((2, 3), '0'), ((2, 4), '0'), ((2, 5), '0'), ((2, 6), '0'), ((2, 7), '0'), ((2, 8), '0'), ((2, 9), '1'), ((3, 0), '1'), ((3, 1), '0'), ((3, 2), '0'), ((3, 3), '0'), ((3, 4), '0'), ((3, 5), '0'), ((3, 6), '0'), ((3, 7), '0'), ((3, 8), '0'), ((3, 9), '1'), ((4, 0), '1'), ((4, 1), '0'), ((4, 2), '0'), ((4, 3), '0'), ((4, 4), '0'), ((4, 5), '0'), ((4, 6), '0'), ((4, 7), '0'), ((4, 8), '0'), ((4, 9), '1'), ((5, 0), '1'), ((5, 1), '3'), ((5, 2), '0'), ((5, 3), '0'), ((5, 4), '0'), ((5, 5), '0'), ((5, 6), '0'), ((5, 7), '0'), ((5, 8), '0'), ((5, 9), '1'), ((6, 0), '1'), ((6, 1), '1'), ((6, 2), '1'), ((6, 3), '1'), ((6, 4), '0'), ((6, 5), '0'), ((6, 6), '0'), ((6, 7), '0'), ((6, 8), '4'), ((6, 9), '1'), ((7, 0), '1'), ((7, 1), '0'), ((7, 2), '0'), ((7, 3), '0'), ((7, 4), '0'), ((7, 5), '0'), ((7, 6), '0'), ((7, 7), '1'), ((7, 8), '1'), ((7, 9), '1'), ((8, 0), '1'), ((8, 1), '0'), ((8, 2), '0'), ((8, 3), '0'), ((8, 4), '0'), ((8, 5), '0'), ((8, 6), '0'), ((8, 7), '1'), ((8, 8), '1'), ((8, 9), '1'), ((9, 0), '1'), ((9, 1), '1'), ((9, 2), '1'), ((9, 3), '1'), ((9, 4), '1'), ((9, 5), '1'), ((9, 6), '1'), ((9, 7), '1'), ((9, 8), '1'), ((9, 9), '1')]
[[(0, 0), '1'], [(0, 1), '1'], [(0, 2), '1'], [(0, 3), '1'], [(0, 4), '1'], [(0, 5), '1'], [(0, 6), '1'], [(0, 7), '1'], [(0, 8), '1'], [(0, 9), '1'], [(1, 0), '1'], [(1, 1), '0'], [(1, 2), '0'], [(1, 3), '0'], [(1, 4), '1'], [(1, 5), '1'], [(1, 6), '0'], [(1, 7), '0'], [(1, 8), '0'], [(1, 9), '1'], [(2, 0), '1'], [(2, 1), '0'], [(2, 2), '0'], [(2, 3), '0'], [(2, 4), '0'], [(2, 5), '0'], [(2, 6), '0'], [(2, 7), '0'], [(2, 8), '0'], [(2, 9), '1'], [(3, 0), '1'], [(3, 1), '0'], [(3, 2), '0'], [(3, 3), '0'], [(3, 4), '0'], [(3, 5), '0'], [(3, 6), '0'], [(3, 7), '0'], [(3, 8), '0'], [(3, 9), '1'], [(4, 0), '1'], [(4, 1), '0'], [(4, 2), '0'], [(4, 3), '0'], [(4, 4), '0'], [(4, 5), '0'], [(4, 6), '0'], [(4, 7), '0'], [(4, 8), '0'], [(4, 9), '1'], [(5, 0), '1'], [(5, 1), '3'], [(5, 2), '0'], [(5, 3), '0'], [(5, 4), '0'], [(5, 5), '0'], [(5, 6), '0'], [(5, 7), '0'], [(5, 8), '0'], [(5, 9), '1'], [(6, 0), '1'], [(6, 1), '1'], [(6, 2), '1'], [(6, 3), '1'], [(6, 4), '0'], [(6, 5), '0'], [(6, 6), '0'], [(6, 7), '0'], [(6, 8), '4'], [(6, 9), '1'], [(7, 0), '1'], [(7, 1), '0'], [(7, 2), '0'], [(7, 3), '0'], [(7, 4), '0'], [(7, 5), '0'], [(7, 6), '0'], [(7, 7), '1'], [(7, 8), '1'], [(7, 9), '1'], [(8, 0), '1'], [(8, 1), '0'], [(8, 2), '0'], [(8, 3), '0'], [(8, 4), '0'], [(8, 5), '0'], [(8, 6), '0'], [(8, 7), '1'], [(8, 8), '1'], [(8, 9), '1'], [(9, 0), '1'], [(9, 1), '1'], [(9, 2), '1'], [(9, 3), '1'], [(9, 4), '1'], [(9, 5), '1'], [(9, 6), '1'], [(9, 7), '1'], [(9, 8), '1'], [(9, 9), '1']]
唯一的区别是现在每个外部元组都是一个列表,理论上,我应该能够以完全相同的方式访问它们。如果列表元素不是元组,为什么无法访问它?

发现问题:

def __init__(self, collider, x, y, gridKeys, tilesetGids, collisionGids):

    self.gridKeys = [list(PROBLEMHERE) for PROBLEMHERE in gridKeys] # Converting each tuple to a mutable sequence.
    self.gids = tilesetGids
    for i in self.gridKeys:
        if ((i[0][0] == x) and (i[0][1] == y)):
            print i
    self.collisionGids = collisionGids
我在理解列表中使用了x作为论点,这混淆了x论点我的分心/错误。。。但这是一种难以理解的分心方式。x参数只是一个整数,但列表中的x是一个包含两个元素的完整元组,该元组是正在测试的元组,这就是结果为false的原因。

发现问题:

def __init__(self, collider, x, y, gridKeys, tilesetGids, collisionGids):

    self.gridKeys = [list(PROBLEMHERE) for PROBLEMHERE in gridKeys] # Converting each tuple to a mutable sequence.
    self.gids = tilesetGids
    for i in self.gridKeys:
        if ((i[0][0] == x) and (i[0][1] == y)):
            print i
    self.collisionGids = collisionGids

我在理解列表中使用了x作为论点,这混淆了x论点我的分心/错误。。。但这是一种难以理解的分心方式。x参数只是一个整数,但列表中的x是一个包含两个元素的完整元组,而该元组正是被测试的元组,这就是结果为false的原因。

在Python 2.7中,输入x变量被重新定义为网格键的最后一个元素

在Python3.3中,这不会发生


简单的解决方案是使用不同的变量名。

在Python 2.7中,输入x变量被重新定义为网格键的最后一个元素

在Python3.3中,这不会发生


简单的解决方案是使用不同的变量名。

它对我有效,但打印您提供的代码也需要几秒钟。您测试的X和Y值是多少?同上。这对我很有效:我有罪。我没看到你改变了构造器。我还以为你只修改了输入参数。它对我有用,但打印你给我的代码也用了几秒钟。您测试的X和Y值是多少?同上。这对我很有效:我有罪。我没看到你改变了构造器。我以为你只是更改了输入参数,你没有感到困惑。您覆盖了一个局部变量,这使解释器感到困惑。请注意,这个问题在python3中是不可能出现的。在python3中,列表理解中的变量在外部是不可见的。使用蟒蛇3,它有彩虹和独角兽!我调查了一下,也发现了这一点。丑小虫:你没有感到困惑。您覆盖了一个局部变量,这使解释器感到困惑。请注意,这个问题在python3中是不可能出现的。在python3中,列表理解中的变量在外部是不可见的。使用蟒蛇3,它有彩虹和独角兽!我调查了一下,也发现了这一点。丑虫: