Python-创建一个函数以从未知数量的参数中获取唯一列表

Python-创建一个函数以从未知数量的参数中获取唯一列表,python,function,unique,Python,Function,Unique,python新手,有人能告诉我我做错了什么吗 我需要编写一个函数,它接受未知数量的参数并返回唯一的列表。 例如: a= ['mary', 'james', 'john', 'john'] b= ['elsie', 'james', 'elsie', 'james'] unique_list(a,b) ['mary', 'james','john', 'elsie'] 这是我做了一些研究后得到的一些代码,但输出不是我需要的: def unique_list:(*something)

python新手,有人能告诉我我做错了什么吗

我需要编写一个函数,它接受未知数量的参数并返回唯一的列表。 例如:

a= ['mary', 'james', 'john', 'john']
b= ['elsie', 'james', 'elsie', 'james']

unique_list(a,b)

['mary', 'james','john', 'elsie']
这是我做了一些研究后得到的一些代码,但输出不是我需要的:

def unique_list:(*something)
    result1= list(something)
    result = ' '.join(sum(result1, []))
    new= []
    for name in result:
            if name not in new:
                           new.append(name)
    return new
有什么想法吗?提前感谢您的帮助。

您可以使用:

对于数量未知的参数,您可以将所有列表与以下参数一起添加:

这将产生:

>>> a= ['mary', 'james', 'john', 'john']
>>> b= ['elsie', 'james', 'elsie', 'james']
>>> unique_list(a, b)
['james', 'john', 'mary', 'elsie']
您可以使用:

对于数量未知的参数,您可以将所有列表与以下参数一起添加:

这将产生:

>>> a= ['mary', 'james', 'john', 'john']
>>> b= ['elsie', 'james', 'elsie', 'james']
>>> unique_list(a, b)
['james', 'john', 'mary', 'elsie']

您可以连接所有列表,然后从此结果列表创建一个集合。这将适用于任何数量的传入列表,其中函数看起来像def unique_lists*列表


您可以连接所有列表,然后从此结果列表创建一个集合。这将适用于任何数量的传入列表,其中函数看起来像def unique_lists*列表


我想你要找的功能是把两个列表组合成一组,然后再把它变成一个列表。像这样:

list(set(list(a+b)))

给出:['james','john','mary','elsie']

我认为您正在寻找的函数是将两个列表组合成一组,然后再将其组合成一个列表。像这样:

list(set(list(a+b)))

给出:['james','john','mary','elsie']

您需要未知数量的参数:

In [73]: import itertools

In [74]: def func(*args):
    ...:     return set(itertools.chain(*args))

In [75]: func([1,2,3,4],[3,4,5],[1,2])
Out[75]: set([1, 2, 3, 4, 5])
或不使用itertools:

In [77]: def func2(*args):
    ...:     setlist=[set(i) for i in args]
    ...:     return set.union(*setlist)

In [78]: func2([1,2,3,4],[3,4,5],[1,2])
Out[78]: set([1, 2, 3, 4, 5])

您需要未知数量的参数:

In [73]: import itertools

In [74]: def func(*args):
    ...:     return set(itertools.chain(*args))

In [75]: func([1,2,3,4],[3,4,5],[1,2])
Out[75]: set([1, 2, 3, 4, 5])
或不使用itertools:

In [77]: def func2(*args):
    ...:     setlist=[set(i) for i in args]
    ...:     return set.union(*setlist)

In [78]: func2([1,2,3,4],[3,4,5],[1,2])
Out[78]: set([1, 2, 3, 4, 5])

在你第二次尝试时,你几乎成功了

实际上,在代码的这一部分,您将每个列表视为一个元素。你可能想考虑列表中的每一个元素。因此,您的代码可以是:

def unique_list(*something):
    result= list(something) 
    new=[]
    for names in result:
        for name in names:
            if name not in new:
                new.append(name)
    return new
这将导致:

['mary', 'james', 'john', 'elsie']
这同样适用于第三次尝试。请注意,在这种情况下,从列表中创建一个集合,然后再从该集合中创建一个列表,可能不会以与原始列表相同的顺序返回元素

根据需要,还可以使用itertools.chain。其职能是:

import itertools

def unique_list(*something):
    return list(set(itertools.chain(*something)))
结果是,记住集合不保持原始顺序:

['james', 'john', 'mary', 'elsie']

在你第二次尝试时,你几乎成功了

实际上,在代码的这一部分,您将每个列表视为一个元素。你可能想考虑列表中的每一个元素。因此,您的代码可以是:

def unique_list(*something):
    result= list(something) 
    new=[]
    for names in result:
        for name in names:
            if name not in new:
                new.append(name)
    return new
这将导致:

['mary', 'james', 'john', 'elsie']
这同样适用于第三次尝试。请注意,在这种情况下,从列表中创建一个集合,然后再从该集合中创建一个列表,可能不会以与原始列表相同的顺序返回元素

根据需要,还可以使用itertools.chain。其职能是:

import itertools

def unique_list(*something):
    return list(set(itertools.chain(*something)))
结果是,记住集合不保持原始顺序:

['james', 'john', 'mary', 'elsie']

如果有未知数量的参数怎么办?如果有未知数量的参数怎么办?@user1667805-不客气。添加了另一个不带itertools的选项。@user1667805-欢迎您。添加了另一个没有itertools的选项。@ThiagoRRamos-感谢您指出关于集合的问题,并展示了另一个可能的选项solution@ThiagoRRamos-感谢您指出关于集合的内容并展示另一种可能的解决方案,这并不能解决问题-列表元素在结果列表中重复。这并不能解决问题-列表元素在结果列表中重复。
a= ['mary', 'james', 'john', 'john']
b= ['elsie', 'james', 'elsie', 'james']
def unique_list(a, b):
    a.extend(b)
    return list(set(a))