kotopanda
kotopanda

Reputation: 265

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

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?

Upvotes: 4

Views: 35761

Answers (5)

Martin Evans
Martin Evans

Reputation: 46779

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.

Upvotes: 0

Joe T. Boka
Joe T. Boka

Reputation: 6581

You can use list comprehension:

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

Upvotes: 2

Iron Fist
Iron Fist

Reputation: 10951

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.

Upvotes: 3

bruno desthuilliers
bruno desthuilliers

Reputation: 77912

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

Upvotes: 5

cezar
cezar

Reputation: 12032

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.

Upvotes: 0

Related Questions