我正在尝试创建一个接受 2 个列表并返回仅具有两个列表差异的列表的函数。
示例:
a = [1,2,5,7,9]
b = [1,2,4,8,9]
结果应该打印[4,5,7,8]
到目前为止的功能:
def xor(list1, list2):
list3=list1+list2
for i in range(0, len(list3)):
x=list3[i]
y=i
while y>0 and x<list3[y-1]:
list3[y]=list3[y-1]
y=y-1
list3[y]=x
last=list3[-1]
for i in range(len(list3) -2, -1, -1):
if last==list3[i]:
del list3[i]
else:
last=list3[i]
return list3
print xor([1,2,5,7,8],[1,2,4,8,9])
第一个 for 循环对其进行排序,第二个 for 循环删除重复项。问题是结果是
[1,2,4,5,7,8,9]
而不是 [4,5,7,8]
,所以它没有完全删除重复项?我可以添加什么来做到这一点。
我不能使用任何特殊模块、.sort、set 或任何东西,基本上只是循环。
最佳答案
如果一个元素存在于一个列表中而另一个列表中不存在,您基本上想将它添加到您的新列表中。这是一个可以做到这一点的紧凑循环。对于两个列表中的每个元素(将它们与 list1+list2
连接),如果元素不存在于其中一个列表中,我们将添加该元素:
[a for a in list1+list2 if (a not in list1) or (a not in list2)]
您可以像现在一样轻松地将它转换为更非 Pythonic 的代码,并通过元素进行显式循环,但老实说,我看不出有什么意义(这并不重要):
def xor(list1, list2):
outputlist = []
list3 = list1 + list2
for i in range(0, len(list3)):
if ((list3[i] not in list1) or (list3[i] not in list2)) and (list3[i] not in outputlist):
outputlist[len(outputlist):] = [list3[i]]
return outputlist
关于python - 比较两个列表并只打印差异? (异或两个列表),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16312730/