在python中从两个列表中删除相同的元素
我正在编写一个函数来删除两个列表中相同的元素在python中从两个列表中删除相同的元素,python,Python,我正在编写一个函数来删除两个列表中相同的元素 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
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_元素([3,11],[2,2,3])
会按预期返回[11],[2,2]
,但在尝试print(del_-same_元素([3],[2,2])时,
我得到了赋值前引用的错误局部变量'same'。如何处理没有相同值的情况?或者,您可以编写这样的程序
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]))
这可能是一个更好的解决方案。或者,您也可以编写这样的程序
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]))
这可能是一个更好的解决方案。使用一点集合论,计算列表的交集,然后删除交集项
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]
在没有交集的情况下,这也非常有效,因为不会删除任何内容使用一点集合论,计算列表的交集,然后删除交集项
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]
在没有交叉点的情况下,这也非常有效,因为使用set交叉点检测公共元素时,不会删除任何内容:
def rm_same(num1, num2):
same = set(num1).intersection(num2)
for s in same:
num1.remove(s)
num2.remove(s)
return num1, num2
使用set交叉点
检测公共元素:
def rm_same(num1, num2):
same = set(num1).intersection(num2)
for s in same:
num1.remove(s)
num2.remove(s)
return num1, num2
或者,您可以使用集合:
same = set(num1) & set(num2)
while same:
val = same.pop()
num1.remove(val)
num2.remove(val)
这至少避免了那些嵌套循环。或者,您可以使用集合来代替:
same = set(num1) & set(num2)
while same:
val = same.pop()
num1.remove(val)
num2.remove(val)
这至少避免了那些嵌套循环。调用print(del_same_元素([3,11],[2,2])按预期返回[11],[2,2]。
这是怎么可能的?两个列表中没有共同的元素?我打错了!我会编辑。如果您有列表[2]
和[2,2]
,您希望得到两个空列表,还是第二个仍然有一个2
?另外,列表修改是否合适(或特别不合适)?我希望[]和[2]。请详细描述并使用更多示例说明您正在尝试执行的操作。调用print(del_same_元素([3,11],[2,2])会按预期返回[11],[2,2]
这是如何实现的?两个列表中没有共同的元素?我打错了!我会编辑。如果您有列表[2]
和[2,2]
,您希望得到两个空列表,还是第二个仍然有一个2
?此外,列表修改是否合适(或特别不合适)?我希望[]和[2]。请使用更多示例详细描述您正在尝试执行的操作。您并不真正需要if
,因为在空列表中循环不会执行块。您也不需要将集合转换为列表:)编辑以避免不必要的操作:)您不真正需要if
,因为在空列表中循环将不执行该块。您也不需要将集合转换为列表:)编辑以避免不必要的操作:)这太完美了!我从没想过这个。这太完美了!我从来没有想到过这一点。很抱歉在制定一套解决方案时太慢了!抱歉在生成一套解决方案时太慢!