我正在编写一个函数来删除两个列表中相同的元素。
def del_same_elements(num1,num2):
for i in range(0,len(num1)):
for j in range(0,len(num2)):
if num1[i] == num2[j]:
same = num1[i]
num1.remove(same)
num2.remove(same)
return num1,num2
调用print (del_same_elements([3,11],[2,2,3]))
按预期返回[11],[2,2]
,但在尝试print (del_same_elements([3],[2,2]))
时,我收到错误local variable 'same' referenced before assignment
。如何处理没有相同值的情况?
答案 0 :(得分:3)
使用set intersection
检测公共元素:
def rm_same(num1, num2):
same = set(num1).intersection(num2)
for s in same:
num1.remove(s)
num2.remove(s)
return num1, num2
答案 1 :(得分:2)
使用一些集理论并计算列表的交集,然后删除项目交集
def del_same_elements(num1, num2):
same = list(set(num1) & set(num2))
for i in same:
num1.remove(i)
num2.remove(i)
return num1, num2
if __name__ == "__main__":
num1, num2 = del_same_elements([1,2,3,4,5], [1,3,5,6])
print num1
print num2
结果
[2, 4]
[6]
在没有交叉点的情况下,这也很有效,因为什么都不会被删除
答案 2 :(得分:1)
或者,你可以写这样的程序
def del_same_elements(num1,num2):
for num in num1 + num2:
if num in num1 and num in num2:
num1.remove(num)
num2.remove(num)
return num1, num2
print (del_same_elements([3,11],[2,2, 3]))
这可以是更好的解决方案。
答案 3 :(得分:0)
或者,你可以改用套装:
same = set(num1) & set(num2)
while same:
val = same.pop()
num1.remove(val)
num2.remove(val)
至少避免那些嵌套循环。