How to remove index list from another list in python?
本问题已经有最佳答案,请猛点这里访问。
我有两张长长的单子。我基本上想从这个列表中删除不匹配条件的元素。例如,
1 2 3 | list_1=['a', 'b', 'c', 'd'] list_2=['1', 'e', '1', 'e'] |
列表1和2相互对应。现在,我想从列表1中删除一些与我的条件不匹配的元素。我必须确保从列表2中删除相应的元素,并且顺序不会混乱。
所以我创建了一个for循环,它遍历列表1,并存储必须删除的元素的所有索引。
让我们说:
1 | index_list = ['1', '3'] |
基本上,我需要确保从列表1中删除b和d,从列表2中删除e和e。我该怎么做?
我试过:
1 2 3 | del (list_1 [i] for i in index_list)] del (list_2 [i] for i in index_list)] |
但是我得到一个错误,索引必须是一个列表,而不是列表。我也尝试过:
1 2 3 | list_1.remove[i] list_2.remove[i] |
但这也不起作用。我尝试创建另一个循环:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 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) |
但这也不起作用。它给了我一个错误,即e和j不是全局名称。
试试这个:
1 2 3 4 5 6 7 8 9 10 11 | >>> list_1=['a', 'b', 'c', 'd'] >>> list_2 = ['1', 'e', '1', 'e'] >>> index_list = ['1', '3'] >>> index_list = [int(i) for i in index_list] # convert str to int for index >>> list_1 = [i for n, i in enumerate(list_1) if n not in index_list] >>> list_2 = [i for n, i in enumerate(list_2) if n not in index_list] >>> list_1 ['a', 'c'] >>> list_2 ['1', '1'] >>> |
怎么样:
1 | list_1, list_2 = zip(*((x, y) for x, y in zip(list_1, list_2) if f(x))) |
其中,
例如:
1 2 3 4 5 6 7 8 9 10 11 | 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')
(请注意,此方法实际上使
1 | list_1, list_2 = list(list_1), list(list_2) |
在"主要"行之后。)
派对有点晚了,但这里有另一个版本。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | list_1=['a', 'b', 'c', 'd'] list_2=['1', 'e', '1', 'e'] index_list = ['1', '3'] #convert index_list to int index_list = [ int(x) for x in index_list ] #Delete elements as per index_list from list_1 new_list_1 = [i for i in list_1 if list_1.index(i) not in index_list] #Delete elements as per index_list from list_2 new_list_2 = [i for i in list_2 if list_2.index(i) not in index_list] print"new_list_1=", new_list_1 print"new_list_2=", new_list_2 |
产量
1 2 3 4 5 6 7 | Python 2.7.9 (default, Dec 10 2014, 12:24:55) [MSC v.1500 32 bit (Intel)] on win32 Type"copyright","credits" or"license()" for more information. >>> ================================ RESTART ================================ >>> new_list_1= ['a', 'c'] new_list_2= ['1', '1'] >>> |
您可以尝试以下操作:
1 2 3 4 | index_list.sort(reverse=True, key=int) for i in index_list: del(list_1[int(i)]) del(list_2[int(i)]) |
或者你也可以这样做:
1 2 | list_1 = [item for item in list_1 if f(item)] list_2 = [item for item in list_2 if f(item)] |
其中,