我很好奇。如何正确迭代列表,比较两个值并删除副本(如果存在)。
这里我创建了一个嵌套的for循环:
my_list = [ 1, 2, 3, 4, 5 ]
temp = [1, 5, 6]
def remove_items_from_list(ordered_list, temp):
# Removes all values, found in items_to_remove list, from my_list
for j in range(0, len(temp)):
for i in range(0, len(ordered_list)):
if ordered_list[i] == temp[j]:
ordered_list.remove(ordered_list[i])
但是当我执行我的代码时,我收到一个错误:
File "./lab3f.py", line 15, in remove_items_from_list
if ordered_list[i] == items_to_remove[j]:
任何人都可以解释原因吗?
这个问题,我希望我将两个列表相互比较,这些列表有两种不同的长度。如果列表中的项目与列表b中的值匹配,我们希望从列表a中删除它。
答案 0 :(得分:2)
你实际上可以在迭代它时从列表中删除项目,但通过@ReblochonMasque读取链接。
以下是删除重复项的一种方法:
def remove_items_from_list(ordered_list, temp):
n = len(ordered_list)
for i in range(n - 1, -1, -1):
if ordered_list[i] in temp:
del ordered_list[i]
然后
>>> remove_items_from_list(my_list, temp)
>>> print(my_list)
[2, 3, 4]
但是,解决问题的最简单方法之一是使用集合:
list(set(my_list) - set(temp))
使用此方法时,结果列表中的项目顺序可能是任意的。此外,这将创建 new 列表,而不是修改现有列表对象。如果订单很重要 - 请使用列表理解:
[v for v in my_list if v not in temp]
答案 1 :(得分:0)
在迭代循环时,从orderer_list中删除导致索引错误的项 试试这个:
def remove_items_from_list(ordered_list, temp):
list_ = [x for x in orderer_list if x not in temp]
return list_
答案 2 :(得分:0)
首先找到重复的元素,然后将其从原始列表中删除。
dup_list = [item for item in temp if item in my_list]
for ele in dup_list:
my_list.remove(ele)
答案 3 :(得分:-1)
您无法从正在迭代的列表中删除项目。您可以创建阵列的副本并从中删除项目。