gpt4 book ai didi

Python - 两个列表之间的差异

转载 作者:行者123 更新时间:2023-12-05 08:32:11 28 4
gpt4 key购买 nike

出于练习目的,我尝试实现一个函数,该函数接收两个列表作为参数并返回它们的差值。所以基本上列表中的元素没有共同点。

我编写了以下函数:

list1 = [4,2,5,3,9,11]
list2 = [7,9,2,3,5,1]

def difference(list1,list2):
return (list(set(list1) - set(list2)))

difference(list1,list2)

def difference_extra_credit(list1,list2):
return [value for value in list1 if value not in list2]

difference(list1,list2)

--> 基本上这两种代码似乎都有效,但我目前面临的问题是列表需要具有相同的长度才能使函数正常工作。如果长度不相同,例如将 100 的整数添加到列表 1,则在打印函数时不会显示为列表之间的差异。

我没能找到一种方法来修改代码,以便列表的长度无关紧要。有人有想法吗?

谢谢!

最佳答案

如果你想要对称差异,使用 ^ 运算符而不是 -

def difference(list1, list2):
return list(set(list1) ^ set(list2))

这是将两个集合合并为一个集合的四个集合运算符。

| union :一个或两个集合中的元素

& intersection :只有两个集合共有的元素

- 差异:左手集中的元素不在右手集中

^ 对称差异:元素在任一集合中但不在两个集合中。

我认为这是一种更易读的函数编写方式

def symmetric_difference(a, b):
return {*a} ^ {*b}

(* 在集合文字中解包需要 python 3.5 或更高版本)

返回一个集合而不是一个列表使得函数的作用更加清晰。输入参数可以是任何可迭代类型,并且由于 set 是无序数据类型,返回一个 set 很明显输入数据中的任何顺序都没有保留。

>>> symmetric_difference(range(3, 8), [1,2,3,4])
{1, 2, 5, 6, 7}
>>> symmetric_difference('hello', 'world')
{'d', 'e', 'h', 'r', 'w'}

关于Python - 两个列表之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52976664/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com