Python 如何返回包含没有重复项的公共元素的列表
到目前为止,我已经有了这一点,但它会返回重复项,例如:Python 如何返回包含没有重复项的公共元素的列表,python,Python,到目前为止,我已经有了这一点,但它会返回重复项,例如: def common_elements(list1, list2): """ Return a list containing the elements which are in both list1 and list2 >>> common_elements([1,2,3,4,5,6], [3,5,7,9]) [3, 5] >>> common_elements
def common_elements(list1, list2):
"""
Return a list containing the elements which are in both list1 and list2
>>> common_elements([1,2,3,4,5,6], [3,5,7,9])
[3, 5]
>>> common_elements(["this","this","n","that"],["this","not","that","that"])
['this', 'that']
"""
result = []
for element in list1:
if element in list2:
result.append(element)
return result
返回为:['this'、'this'、'that']
使用:
在本例中,我们取两个集合的交集,这两个集合依次由两个列表构成。每组由每个列表中的唯一项组成。我们最终转换回列表,因为这是所需的返回类型
def common_elements(a, b):
return list(set(a) & set(b))
编辑:不需要将b转换为集合。感谢@Johnsyweb您想要使用集合,因为集合有一些非常好的操作:
>>> a = [1,2,3,4,5,6]
>>> b = [3,5,7,9]
>>> list(set(a).intersection(b))
[3, 5]
使用
set.intersection()
,因为这意味着无需将list2
转换为集合
>>> a = set([1, 2, 3, 4])
>>> b = set([3, 4, 5, 6])
>>> a.intersection(b)
set([3, 4])
>>> a.difference(b)
set([1, 2])
>>> b.intersection(a)
set([5, 6])
>>> a.union(b)
set([1, 2, 3, 4, 5, 6])
选择较短的列表转换为集合更有效
def common_elements(list1, list2):
return set(list1).intersection(list2)
当然,要返回列表,您可以使用
def common_elements(list1, list2):
short_list, long_list = sorted((list1, list2), key=len)
return set(short_list).intersection(long_list)
set.intersection()
适用于任何iterable,因此无需将b
转换为set
@gnibler:谢谢,我不记得了。更新了我的答案,并更新了你的答案。set.intersection()
适用于任何iterable,因此无需将b
转换为set
!这样更好。
def common_elements(list1, list2):
return set(list1).intersection(list2)
def common_elements(list1, list2):
short_list, long_list = sorted((list1, list2), key=len)
return set(short_list).intersection(long_list)
return list(set(...))