我已经找了几个小时了,似乎找不到一个足够深入的答案;每个人都会停下来,例如,列表中的一个列表。当我试图推断我需要什么时,我得到一个错误,它说“TypeError:'int'object is not subscribable”。我是个无名小卒,所以如果你能解释一下我做错了什么,以及如何解决它,我将非常感激。在
所以。。。我有5个项目我想放在一个网格,没有他们重叠。对于每个项,我创建一个元组列表,这些元组表示该项将覆盖的坐标。对于每个列表,我要将所有坐标与我放置的所有其他项目的坐标进行比较。如果有任何坐标是重复的,我抛出列表并生成一个新的。否则,我会将新列表添加到“主”列表中。最后,我得到了元组列表,如下所示:
usedCoords = [[(5, 18), (5, 19)], [(2, 4), (3, 4), (4, 4)], [(8, 17), (9, 17), (10, 17), (11, 17)], [(6, 3), (6, 4), (6, 5), (6, 6), (6, 7)], [(15, 12), (15, 13), (15, 14), (15, 15), (15, 16), (15, 17)]]
然后我生成另一个列表,如下所示:
^{pr2}$问题是,如何比较这两个元组并确保没有一个元组匹配?这就是我所处的位置,但似乎不起作用。(check()是创建元组列表的函数)
check()
for i in checkC:
if i[1][1] in usedCoords:
tf = True
print('used')
else:
tf = False
if tf == False:
usedCoords.append(checkC)
tf = True
print('usedCoords = ',usedCoords)
print('checkC = ', checkC)
只需检查另一个列表中是否存在任何坐标,如下所示:
这里的“真”意味着至少有一个匹配。在示例数据中,usedcords中的最后一个列表包含checkC中的元组。在
您的}只是一个元组,就像
checkC
是一个元组列表,而不是一个元组列表,正如您所宣称的那样:因此,当您for i in checkC:
时,每个{(15, 12)
。在所以,}的第二个元素,它是{}的第二个元素,这是没有意义的,因为{}是一个整数,没有元素。因此出现了错误。在
i[1]
是完全有效的,它是(15, 12)
的第二个元素,12
。但是i[1][1]
不是{但我根本不知道你为什么要索引}。在
i
。您希望将元组(15, 12)
作为单个值查找;您不希望分别查找15和12。所以只要使用i
,而不是{这将消除您的实际错误,因为
if i in userCoords
是合法的,但它仍然没有用。像(15, 12)
这样的元组不可能在usedCoords
中,因为usedCoords
只保存元组列表,而不是元组。在您要问的是
i
是否在usedCoords
中的任何子列表中:如果您不了解
^{pr2}$any
函数和生成器表达式或其他理解,您应该通读官方教程,从Iterators开始;它解释得比StackOverflow的任何即时回答都好得多。但在此之前,您始终可以编写循环并显式检查:同时,你的循环也有问题。对于
checkC
的每个成员,如果找到了tf
则将其设置为True
,如果找不到它,False
。因此,在循环的末尾,tf
只会告诉您是否找到了最后一个成员。如果您想知道是否找到任何成员,就不能一直重置tf = False
;一旦它是True
,它必须永远保持True
。所以,整个过程变成:可以简化为:
更进一步,为了:
没有得到你想要达到的目标。 我想 这个
应该变成这样
^{pr2}$相关问题 更多 >
编程相关推荐