如何在Python中从另一个列表中删除索引列表?
如何在Python中从另一个列表中删除索引列表?
这个问题已经有答案了:
我有两个很长的列表。我想要从这个列表中删除那些不符合条件的元素。比如说,
list_1=['a', 'b', 'c', 'd'] list_2=['1', 'e', '1', 'e']
第一个列表和第二个列表对应。现在我想要删除第一个列表中不符合我的条件的元素。我必须确保我同时删除第二个列表中相应的元素而且顺序不能弄错。
所以我创建了一个循环遍历第一个列表并且存储所有需要删除的元素的索引。
假设:
index_list = ['1', '3']
基本上,我需要确保我从列表1中删除b和d,从列表2中删除e和e。我该怎么做呢?
我试了:
del (list_1 [i] for i in index_list)] del (list_2 [i] for i in index_list)]
但是我得到了一个错误,提示索引必须是列表而不是列表;我还试了:
list_1.remove[i] list_2.remove[i]
但是这也不起作用。我试了创建另一个循环:
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不是全局名称。
admin 更改状态以发布 2023年5月21日
如何:
list_1, list_2 = zip(*((x, y) for x, y in zip(list_1, list_2) if f(x)))
其中f
是一个函数,用于测试list_1
中的某个值是否符合您的条件。
例如:
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')
(请注意,这种方法实际上将list1
和list2
转换为元组,这对您的用例可能很好,也可能不好。如果您确实需要它们是列表,则可以使用以下行轻松地将它们转换为列表:
list_1, list_2 = list(list_1), list(list_2)
在“主”行后。)
尝试这个:
>>> 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'] >>>