Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/327.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 - Fatal编程技术网

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(...))