我需要找到两个列表之间的区别,以解决我想要解决的问题。
例如:if:
list1 = ["Johny", "Lisa", "Madison", "Kirean"]
list2 = ["Lisa", "Madison", "Kirean"]
print difference(list1, list2)
#Should return ["Johnny"]
我尝试了两种不同的方法。
一个循环遍历列表并检查类似元素并删除类似元素。编译一半的案件花了太长时间。
另一种方法是使用减法集。但是这种方法在某些情况下没有返回任何内容。(如果这些情况在时限内,第一种解决方案就解决了这些问题。)
还有其他方法可以立于不败之地吗?
这是问题的链接:http://www.dmoj.ca/problem/coci14c2p2
这是我的代码:
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]
答案 0 :(得分:2)
您可以使用set和symmetric_difference()
,即查找恰好位于其中一个集合中的元素:
list1 = ["Johny", "Lisa", "Madison", "Kirean"]
list2 = ["Lisa", "Madison", "Kirean"]
list(set(list1).symmetric_difference(list2))
# Output: ['Johny']
请注意,如果使用difference()
,则在交换list1
和list2
时输出将为空。
答案 1 :(得分:2)
如@ YS-L所述,set.symmetric_difference
是您所需要的,而不是set.difference
。此外,您可以改为使用运算符^
:
In [108]: set(list2) ^ set(list1)
Out[108]: {'Johny'}
In [109]: set(list1).symmetric_difference(list2)
Out[109]: {'Johny'}
答案 2 :(得分:1)
你需要使用set:
>>> list1 = ["Johny", "Lisa", "Madison", "Kirean"]
>>> list2 = ["Lisa", "Madison", "Kirean"]
>>> list(set(list1) - set(list2))
['Johny']
答案 3 :(得分:0)
怎么样:
set1 = set(list1)
set2 = set(list2)
result = list((set1 | set2) - (set1 & set2))