Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 快速查找两个在所有情况下都有效的列表之间差异的方法_Python_List_Loops_Set - Fatal编程技术网

Python 快速查找两个在所有情况下都有效的列表之间差异的方法

Python 快速查找两个在所有情况下都有效的列表之间差异的方法,python,list,loops,set,Python,List,Loops,Set,我需要找出我试图解决的问题的两个列表之间的差异 例如,如果: list1 = ["Johny", "Lisa", "Madison", "Kirean"] list2 = ["Lisa", "Madison", "Kirean"] print difference(list1, list2) #Should return ["Johnny"] 我试过两种不同的方法 一个是在列表中循环,检查相似的元素并删除相似的元素。这花费了太长的时间来编译一半的案例 另一种方法是使用减法集。但在某些情况下,这

我需要找出我试图解决的问题的两个列表之间的差异

例如,如果:

list1 = ["Johny", "Lisa", "Madison", "Kirean"]
list2 = ["Lisa", "Madison", "Kirean"]
print difference(list1, list2)
#Should return ["Johnny"]
我试过两种不同的方法

一个是在列表中循环,检查相似的元素并删除相似的元素。这花费了太长的时间来编译一半的案例

另一种方法是使用减法集。但在某些情况下,这种方法没有返回任何结果(如果这些情况在时间限制内,则通过第一个解决方案解决)

有没有其他的方法可以立于不败之地,而且速度足够快

这是问题的链接:

这是我的代码:

a = []
b = []
n = input()
for i in range(n):
    a.append(raw_input())
for i in range(n-1):
    b.append(raw_input())

print list(set(a) ^ set(b))[0]

您可以使用set和
symmetric_difference()
,即查找正好位于其中一个集合中的元素:

list1 = ["Johny", "Lisa", "Madison", "Kirean"]
list2 = ["Lisa", "Madison", "Kirean"]
list(set(list1).symmetric_difference(list2))
# Output: ['Johny']

请注意,如果使用了
difference()
,则如果交换了
list1
list2
,则输出将为空。

您可以使用set和
symmetric\u difference()
,即查找恰好位于其中一个集合中的元素:

list1 = ["Johny", "Lisa", "Madison", "Kirean"]
list2 = ["Lisa", "Madison", "Kirean"]
list(set(list1).symmetric_difference(list2))
# Output: ['Johny']
请注意,如果使用了
difference()
,则如果交换了
list1
list2
,则输出将为空。

您需要使用set:

>>> list1 = ["Johny", "Lisa", "Madison", "Kirean"]
>>> list2 = ["Lisa", "Madison", "Kirean"]
>>> list(set(list1) - set(list2))
['Johny']
您需要使用set:

>>> list1 = ["Johny", "Lisa", "Madison", "Kirean"]
>>> list2 = ["Lisa", "Madison", "Kirean"]
>>> list(set(list1) - set(list2))
['Johny']
那么:

set1 = set(list1)
set2 = set(list2)

result = list((set1 | set2) - (set1 & set2))
那么:

set1 = set(list1)
set2 = set(list2)

result = list((set1 | set2) - (set1 & set2))

正如@YS-L所提到的,
set.symmetric\u difference
是您所需要的,但不是
set.difference
。此外,您还可以使用运算符
^

In [108]: set(list2) ^ set(list1)
Out[108]: {'Johny'}

In [109]: set(list1).symmetric_difference(list2)
Out[109]: {'Johny'}

正如@YS-L所提到的,
set.symmetric\u difference
是您所需要的,但不是
set.difference
。此外,您还可以使用运算符
^

In [108]: set(list2) ^ set(list1)
Out[108]: {'Johny'}

In [109]: set(list1).symmetric_difference(list2)
Out[109]: {'Johny'}


相关:您希望
差异(['a','b','c'],['b','c','d'])
返回什么?你想要对称差分(即['a','d'])`吗?你关心顺序吗?“所有情况”要简单得多,如果项目都是可哈希的(字符串当然是)@DSM可以保证列表2中的所有项目都在列表1中,这很奇怪,因为我能想到的唯一一种情况是,如果
list2
中有元素,那么减法集应该失败。您想看看哪些元素不在
list1
中。如果
list2
的所有元素都在
list1
中,那么
set(list1)-set(list2)
set(list1)^set(list2)
之间应该没有区别。相关:您希望
的区别(['a','b','c',['b','c','d')
返回什么?你想要对称差分(即['a','d'])`吗?你关心顺序吗?“所有情况”要简单得多,如果项目都是可哈希的(字符串当然是)@DSM可以保证列表2中的所有项目都在列表1中,这很奇怪,因为我能想到的唯一一种情况是,如果
list2
中有元素,那么减法集应该失败。您想看看哪些元素不在
list1
中。如果
list2
的所有元素都在
list1
中,那么
set(list1)-set(list2)
set(list1)^set(list2)
之间应该没有区别。如果顺序不重要,这是一个很好的方法。您还可以对它们进行排序,并使用类似mergesort的合并步骤,尤其是当集合太大而无法放入RAM时。@mehdialli更新您的实时输出,以便我们更好地理解如果您得到一个空集合,则
list(set(list2)-set(list1))
symmetric_difference
修复了它。只需进行差异运算,就可以返回第一阶段的所有内容,但不会返回第二阶段的内容。所以,如果第一个是第二个的子集,它将返回空。如果顺序不重要,这是一个很好的方法。您还可以对它们进行排序,并使用类似mergesort的合并步骤,尤其是当集合太大而无法放入RAM时。@mehdialli更新您的实时输出,以便我们更好地理解如果您得到一个空集合,则
list(set(list2)-set(list1))
symmetric_difference
修复了它。只需进行差异运算,就可以返回第一阶段的所有内容,但不会返回第二阶段的内容。因此,如果first是second的子集,则返回空。在我使用的judge中,这些解决方案对三个测试用例都不起作用。@MehdiAlali然后向其他人展示它在哪些情况下失败,以及您预期的输入和输出;)问题是我不知道它们是什么:(然后请将原始问题显示在judge上并粘贴代码我将其添加到问题描述中这些解决方案都不适用于我使用的judge中的三个测试用例。@MehdiAlali然后向其他人展示在什么情况下失败,以及您预期的输入和输出;)问题是我不知道它们是什么:(然后请在裁判上显示原始问题并粘贴代码)我将其添加到问题描述中