Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to remove index list from another list in python? [duplicate]

Tags:

python

list

I have two long lists. I basically want to remove elements from this list that do not match a condtion. For example,

list_1=['a', 'b', 'c', 'd']

list_2=['1', 'e', '1', 'e']

List one and two correspond to each other. Now I would like to remove certain elements from list one that do not match my condition. I have to make sure that I remove the corresponding elements from list 2 and the order does not mess up.

So I created a for loop that goes through list 1 and stores all the indices of elements that have to be removed.

Let’s say:

index_list = ['1', '3']

Basically, I need to make sure I remove b and d from list 1 and e and e from list 2. How do I do this?

I tried:

del (list_1 [i] for i in index_list)]

del (list_2 [i] for i in index_list)]

But I get an error that indices has to be a list, not list. I also tried:

list_1.remove[i]

list_2.remove[i]

But this does not work either. I tried creating another loop:

for e, in (list_1):

    for i, in (index_list):

        if e == i:

            del list_1(i)

for j, in (list_2):

    for i, in (index_list):

        if j == i:

            del list_2(i)

But this does not work either. It gives me an error that e and j are not global names.

like image 643
san3567 Avatar asked Oct 23 '16 04:10

san3567


1 Answers

How about:

list_1, list_2 = zip(*((x, y) for x, y in zip(list_1, list_2) if f(x)))

Where f is a function that tests whether a certain value in list_1 matches your condition.

For example:

list_1 = ['a', 'b', 'c', 'd']
list_2 = ['1', 'e', '1', 'e']


def f(s):
    return s == 'b' or s == 'c'

list_1, list_2 = zip(*((x, y) for x, y in zip(list_1, list_2) if f(x)))

print list_1
print list_2

('b', 'c')

('e', '1')

(Note that this method actually makes list1 and list2 into tuples, which may or may not be okay for your use case. If you really need them to be lists, then you can very easily convert them to lists with the line:

list_1, list_2 = list(list_1), list(list_2)

right after the "primary" line.)

like image 62
pzp Avatar answered Oct 15 '22 14:10

pzp