Uniqueify返回一个空列表

时间:2015-04-20 02:22:41

标签: python

我是python的新手并尝试创建一个函数Uniqueify(L),它将被赋予一个数字列表或一个字符串列表(非空),并将返回一个唯一元素列表名单。 到目前为止,我有:

def Uniquefy(x):
    a = []
    for i in range(len(x)):
        if x[i] in a == False:
            a.append(x[i])
    return a

看起来if str(x[i]) in a == False:失败了,这导致函数返回一个空列表。 你们可以提供任何帮助吗?

6 个答案:

答案 0 :(得分:4)

关系运算符都具有完全相同的优先级并且是链接的。这意味着这一行:

if x[i] in a == False:

评估如下:

if (x[i] in a) and (a == False):

这显然不是你想要的。

解决方案是删除第二个关系运算符:

if x[i] not in a:

答案 1 :(得分:2)

您可以根据列表创建set,该列表仅包含唯一值:

>>> s = ["a", "b", "a"]
>>> print set(s)
set(['a', 'b'])

答案 2 :(得分:2)

这里最好的选择是改用套装!根据定义,集合只包含唯一的项目,并且将相同的项目放入两次不会产生两个副本。

如果您需要从列表创建并需要回列表,请尝试此操作。但是,如果没有特定的理由你需要一个列表,那么只需绕过一个集合(无论如何,这将是一种打字方式)。

def uniquefy(x):
   return list(set(x))

答案 3 :(得分:1)

您可以使用内置的set类型从集合中获取唯一元素:

x = [1,2,3,3]
unique_elements = set(x)

答案 4 :(得分:1)

您应该在这里使用set()。它减少了in操作时间:

def Uniquefy(x):
    a = set()
    for item in x:
        if item not in a:
            a.add(item)
    return list(a)

或等效地:

def Uniquefy(x):
    return list(set(x))

答案 5 :(得分:0)

如果订单有问题:

def uniquefy(x):
    s = set()
    return [i for i in x if i not in s and s.add(i) is None]

否则:

def uniquefy(x):
    return list(set(x))