我是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:
失败了,这导致函数返回一个空列表。
你们可以提供任何帮助吗?
答案 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))