Python: TypeError: list indices must be integers, not list

◇◆丶佛笑我妖孽 提交于 2019-12-12 21:06:27

问题


I've got two lists of coordinates, they look like this:

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

Now I need to check if there are any same coordinates on both lists and create a new list of them. So I wrote:

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

and...

TypeError: list indices must be integers, not list

I don't know what's wrong, couldn't find a solution...

Could anyone help me, please?

Maybe there's a simplier way to do such a thing?


回答1:


You are indexing your lists with a non-int type index:

for count in list_kp2_ok:
    for count1 in list_kp2_2_ok:
        if list_kp2_ok[count]==list_kp2_2_ok[count1]:

So a quick fix for that is to do it this way:

for coord1 in list_kp2_ok:
    for coord2 in list_kp2_2_ok:
        if coord1==coord2:

You can even do the whole coding in one statement:

list_wsp=[coords for coords in list_kp2_ok if coords in list_kp2_2_ok]

This will directly output to you the common coordinates in both lists.




回答2:


Python's for loop is not indexed-based, it really iterates on the sequence (or any iterable). So in this code:

for whatever in some_iterable:
    do_something_with(whatever)

whatever is successively bound to each item in some_iterable. As an example:

>>> mylist = ["A", "B", "C"]
>>> for item in mylist:
...     print "item is", item
... 
item is A
item is B
item is C

If you want the indexes to, you can use the builtin enumerate(iterable, start=0) function, which yields a (index, item) tuple for each item in iterable:

>>> 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



回答3:


You can use list comprehension:

new_list = [i for i in list_kp2_ok if i in list_kp2_2_ok]



回答4:


You don't have to declare the counter variables. You can iterate through the lists with for-in:

list_wsp = []
for elem in list_k2_ok:
    for elem1 in list_k2_2_ok:
        if elem == elem1:
            list_wsp.append(elem)

This will create the new list with the same coordinates.




回答5:


An alternative approach might be to try using sets:

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

This first converts the inner list items to tuples as they are then hashable by the set function. The answer is then the intersection of the two sets. This would remove any duplicates which may or may not be desirable.



来源:https://stackoverflow.com/questions/30890707/python-typeerror-list-indices-must-be-integers-not-list

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!