如何从另一个列表中删除一个删除该元素的列表一次。像下面的例子:如何从另一个列表中删除一个删除该元素的列表
list1= [1, 2, 3, 4, 5, 6, 7, 3, 4, 4, 5]
list2= [1, 2, 3, 4, 5]
Output=[6, 7, 3, 4, 4, 5]
我常用的一套,但它移除所有在一个列表中的元素形成另一个列表
set(list1)-set(list2)
output= {6, 7}
如何从另一个列表中删除一个删除该元素的列表一次。像下面的例子:如何从另一个列表中删除一个删除该元素的列表
list1= [1, 2, 3, 4, 5, 6, 7, 3, 4, 4, 5]
list2= [1, 2, 3, 4, 5]
Output=[6, 7, 3, 4, 4, 5]
我常用的一套,但它移除所有在一个列表中的元素形成另一个列表
set(list1)-set(list2)
output= {6, 7}
你可以通过第二个列表进行迭代,并从删除元素如果找到了第一个列表。这里是一个示例代码:
for element in l2:
if element in l1:
index = l1.index(element)
del l1[index]
编辑:请参阅命令行的输入/输出。
输入:
>>> l1 = [1, 2, 3, 4]
>>> l2 = [2, 3, 5, 6]
>>> for element in l2:
... if element in l1:
... index = l1.index(element)
... del l1[index]
...
输出:
>>> l1
[1, 4]
要比较两个列表,你需要看看这个问题,参照列表2。既然你想删除每个副本,你可以遍历list2并删除list1中的每个重复条目,因为它们是在引用list2时发现的。
list1= [1, 2, 3, 4, 5, 6, 7, 3, 4, 4, 5]
list2= [1, 2, 3, 4, 5]
Output=[6, 7, 3, 4, 4, 5]
for i in list2:
try: del list1[list1.index(i)]
except ValueError: pass
这样,如果一个项目在列表2它是从列表1很多次,因为它在列表2时删除,如果在第二个列表比第一类是一个项目的多次出现,错误被捕获。
您首先需要一个唯一元素(集合)的集合来选择要在列表中删除的元素。然后,逐个遍历一个唯一元素集合,并从列表中删除该元素的一个实例,直到集合中没有更多独特元素。
li = [1, 2, 3, 4, 5, 6, 7, 3, 4, 4, 5]
se = {1, 2, 3, 4, 5, 9} # 9 is intentionally added to show error handling
for element in se:
try:
li.remove(element)
except ValueError:
print("Element '%s' doesn't exist in the list." % element)
print(li) # prints: [6, 7, 3, 4, 4, 5]
需要注意的是list.remove()
提出了一个ValueError
应该试图删除一个不存在的项目发生是非常重要的。一种方法(pythonic方法越多)就是让try-except块捕获错误。您可以选择您希望如何处理错误;我只是选择打印出错误信息。另一种方法是进行防守测试。下面是如果其他的防御性编码:
li = [1, 2, 3, 4, 5, 6, 7, 3, 4, 4, 5]
se = {1, 2, 3, 4, 5}
for element in se:
if element in li:
li.remove(element)
print(li) # prints: [6, 7, 3, 4, 4, 5]
一个衬垫利用副作用
列表解析输出是不是你想要的清单 - 但它正在修改list1
,因为它的工作原理
list1= [1, 2, 3, 4, 5, 6, 7, 3, 4, 4, 5]
list2= [1, 2, 3, 4, 5]
[list1.pop(list1.index(e)) for e in list2 if e in list1]
Out[65]: [1, 2, 3, 4, 5]
list1
Out[66]: [6, 7, 3, 4, 4, 5]
它看起来会更好,如果你还需要列表理解输出删除的项目,否则有人可能会认为你滥用了列表理解,当你应该刚刚写了一个for循环
你试过了什么?你有什么问题?我们帮助解决不做你的工作 –
所以,你想要为'list2'中的每个项目移除第一个找到的'list1'项目? –
是的,可能是第一次发现项目是一个正确的字 – Dani