Python: TypeError: list indices must be integers, not list
Python: TypeError: list indices must be integers, not list
我有两个坐标列表,它们看起来像这样:
list_kp2_ok:
[[1185.60009765625, 933.6000366210938], [1310.4000244140625, 828.0000610351562], [1067.0, 979.0], [1310.0, 828.0], [1423.2000732421875, 814.800048828125], [1306.0, 828.0], [3634.0, 605.0], [1308.0960693359375, 827.7120971679688], [1422.7200927734375, 815.0400390625], [1185.1199951171875, 933.1200561523438], [1186.56005859375, 923.0400390625], [1306.3681640625, 829.4401245117188], [1194.393798828125, 839.80810546875], [1187.1361083984375, 922.7520751953125], [1082.8800048828125, 849.6000366210938]]
list_kp2_2_ok:
[[835.0, 1201.0], [1086.0, 850.0], [1187.0, 924.0], [1197.0, 839.0], [1310.0, 828.0], [3634.0, 605.0], [1195.2000732421875, 838.800048828125], [1308.0, 828.0000610351562], [1084.800048828125, 849.6000366210938], [1310.4000244140625, 828.0000610351562], [1186.800048828125, 924.0000610351562], [1296.0, 956.4000244140625], [1082.8800048828125, 849.6000366210938], [1072.800048828125, 944.6400146484375], [1083.4560546875, 850.1760864257812], [1187.1361083984375, 922.7520751953125], [3633.984375, 606.528076171875], [1082.4193115234375, 850.1761474609375], [1306.3681640625, 829.4401245117188], [1181.9521484375, 966.2977294921875], [1306.3682861328125, 828.6107788085938]]
现在我需要检查两个列表中是否有相同的坐标并创建一个新列表。
所以我写道:
list_wsp=[]
count=0
count1=0
print type(count)
print type(count1)
for count in list_kp2_ok:
for count1 in list_kp2_2_ok:
if list_kp2_ok[count]==list_kp2_2_ok[count1]:
list_wsp.append(list_kp2_ok[count])
count1=count1+1
if count1==len(list_kp2_2_ok)-1:
break
count=count+1
if count==len(list_kp2_ok)-1:
break
和...
TypeError: list indices must be integers, not list
我不知道出了什么问题,找不到解决方案...
有人能帮帮我吗?
也许有更简单的方法来做这样的事情?
您不必声明计数器变量。您可以使用 for-in:
遍历列表
list_wsp = []
for elem in list_k2_ok:
for elem1 in list_k2_2_ok:
if elem == elem1:
list_wsp.append(elem)
这将创建具有相同坐标的新列表。
Python 的 for
循环不是基于索引的,它实际上是在序列(或任何可迭代的)上迭代。所以在这段代码中:
for whatever in some_iterable:
do_something_with(whatever)
whatever
依次绑定到 some_iterable
中的每个项目。例如:
>>> mylist = ["A", "B", "C"]
>>> for item in mylist:
... print "item is", item
...
item is A
item is B
item is C
如果你想要索引,你可以使用内置的 enumerate(iterable, start=0)
函数,它为 iterable
中的每个项目生成一个 (index, item)
元组:
>>> for index, item in enumerate(mylist):
... print "item %s is %s" % (index, item)
...
item 0 is A
item 1 is B
item 2 is C
您正在使用非 int 类型索引为您的列表编制索引:
for count in list_kp2_ok:
for count1 in list_kp2_2_ok:
if list_kp2_ok[count]==list_kp2_2_ok[count1]:
所以一个快速解决方法就是这样做:
for coord1 in list_kp2_ok:
for coord2 in list_kp2_2_ok:
if coord1==coord2:
您甚至可以在一条语句中完成整个编码:
list_wsp=[coords for coords in list_kp2_ok if coords in list_kp2_2_ok]
这将直接向您输出两个列表中的公共坐标。
您可以使用列表理解:
new_list = [i for i in list_kp2_ok if i in list_kp2_2_ok]
另一种方法可能是尝试使用集合:
for x in set([tuple(l) for l in list_kp2_ok]).intersection(set([tuple(l) for l in list_kp2_2_ok])):
print x
这首先将内部列表项转换为元组,因为它们随后可由 set 函数散列。答案就是两组的交集。这将删除任何可能不需要或不需要的重复项。
我有两个坐标列表,它们看起来像这样:
list_kp2_ok:
[[1185.60009765625, 933.6000366210938], [1310.4000244140625, 828.0000610351562], [1067.0, 979.0], [1310.0, 828.0], [1423.2000732421875, 814.800048828125], [1306.0, 828.0], [3634.0, 605.0], [1308.0960693359375, 827.7120971679688], [1422.7200927734375, 815.0400390625], [1185.1199951171875, 933.1200561523438], [1186.56005859375, 923.0400390625], [1306.3681640625, 829.4401245117188], [1194.393798828125, 839.80810546875], [1187.1361083984375, 922.7520751953125], [1082.8800048828125, 849.6000366210938]]
list_kp2_2_ok:
[[835.0, 1201.0], [1086.0, 850.0], [1187.0, 924.0], [1197.0, 839.0], [1310.0, 828.0], [3634.0, 605.0], [1195.2000732421875, 838.800048828125], [1308.0, 828.0000610351562], [1084.800048828125, 849.6000366210938], [1310.4000244140625, 828.0000610351562], [1186.800048828125, 924.0000610351562], [1296.0, 956.4000244140625], [1082.8800048828125, 849.6000366210938], [1072.800048828125, 944.6400146484375], [1083.4560546875, 850.1760864257812], [1187.1361083984375, 922.7520751953125], [3633.984375, 606.528076171875], [1082.4193115234375, 850.1761474609375], [1306.3681640625, 829.4401245117188], [1181.9521484375, 966.2977294921875], [1306.3682861328125, 828.6107788085938]]
现在我需要检查两个列表中是否有相同的坐标并创建一个新列表。 所以我写道:
list_wsp=[]
count=0
count1=0
print type(count)
print type(count1)
for count in list_kp2_ok:
for count1 in list_kp2_2_ok:
if list_kp2_ok[count]==list_kp2_2_ok[count1]:
list_wsp.append(list_kp2_ok[count])
count1=count1+1
if count1==len(list_kp2_2_ok)-1:
break
count=count+1
if count==len(list_kp2_ok)-1:
break
和...
TypeError: list indices must be integers, not list
我不知道出了什么问题,找不到解决方案...
有人能帮帮我吗?
也许有更简单的方法来做这样的事情?
您不必声明计数器变量。您可以使用 for-in:
遍历列表list_wsp = []
for elem in list_k2_ok:
for elem1 in list_k2_2_ok:
if elem == elem1:
list_wsp.append(elem)
这将创建具有相同坐标的新列表。
Python 的 for
循环不是基于索引的,它实际上是在序列(或任何可迭代的)上迭代。所以在这段代码中:
for whatever in some_iterable:
do_something_with(whatever)
whatever
依次绑定到 some_iterable
中的每个项目。例如:
>>> mylist = ["A", "B", "C"]
>>> for item in mylist:
... print "item is", item
...
item is A
item is B
item is C
如果你想要索引,你可以使用内置的 enumerate(iterable, start=0)
函数,它为 iterable
中的每个项目生成一个 (index, item)
元组:
>>> for index, item in enumerate(mylist):
... print "item %s is %s" % (index, item)
...
item 0 is A
item 1 is B
item 2 is C
您正在使用非 int 类型索引为您的列表编制索引:
for count in list_kp2_ok:
for count1 in list_kp2_2_ok:
if list_kp2_ok[count]==list_kp2_2_ok[count1]:
所以一个快速解决方法就是这样做:
for coord1 in list_kp2_ok:
for coord2 in list_kp2_2_ok:
if coord1==coord2:
您甚至可以在一条语句中完成整个编码:
list_wsp=[coords for coords in list_kp2_ok if coords in list_kp2_2_ok]
这将直接向您输出两个列表中的公共坐标。
您可以使用列表理解:
new_list = [i for i in list_kp2_ok if i in list_kp2_2_ok]
另一种方法可能是尝试使用集合:
for x in set([tuple(l) for l in list_kp2_ok]).intersection(set([tuple(l) for l in list_kp2_2_ok])):
print x
这首先将内部列表项转换为元组,因为它们随后可由 set 函数散列。答案就是两组的交集。这将删除任何可能不需要或不需要的重复项。