python - 比较两个列表并只打印差异? (异或两个列表)

标签 python python-2.7

我正在尝试创建一个接受 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/

相关文章:

python - Django:无法配置处理程序 'syslog'

python - 从两个列表中提取相同的元素

python - 检查给定元素是否在队列中

python - Pygame 屏幕抖动减慢游戏速度如何修复?

python - 返回Python的for循环

python - 是python2不愿意释放内存吗?

Python 模类型错误

python - 在 Python 中使用多个条件索引数组?

python - 在 python 中确定硬币组合

python - python新手: pyodconverter with Apache OpenOffice 4 on Windows