出于练习目的,我试图实现一个函数,该函数接收两个列表作为参数并返回它们之间的差异。因此,基本上,列表中的元素并不相同。
我编写了以下函数:
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)
->基本上,这两个代码似乎都可以工作,但我目前面临的问题是,列表必须具有相同的长度才能使函数正常工作。如果长度不相同,则在列表1中添加例如100的整数,如果您打印函数,则不会显示为列表之间的差异。
我没有设法找到一种方法来修改代码,以使列表的长度无关紧要。有人有想法吗?
谢谢!
试用您的代码,无论列表的长度如何,它似乎都可以正常工作-当我添加100
到时list1
,它对于两个不同的函数都显示出来。
但是,您的代码似乎存在一些问题,可能会导致这些问题。首先,你接受参数list1
和list2
两种功能,但这些变量是相同的名称列表变量。这似乎不会引起问题,但是这意味着不再可以访问全局变量,通常最好的做法是通过对全局变量和函数内的变量使用不同的名称来避免混淆。
此外,您的函数不会产生对称差-它仅循环遍历第一个列表中的变量,因此不会计算第二个列表中的唯一变量。要轻松地解决这个问题,你可以添加一行您的清单合并成一笔单,然后遍历是整个列表检查,如果每个值仅在其中一个列表-这将用^
做一个xor
变量与否的比较在两个列表中,因此true
如果它仅在列表之一中,则返回。可以这样完成:
def difference_extra_credit(l1,l2):
list = l1 + l2
return [value for value in list if (value in l1) ^ (value in l2)]
我自己测试此功能已生成列表[4, 11, 7, 1]
,并且将[4, 11, 100, 7, 1]
if100
添加到list1
或中list2
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句