编写一个函数,该函数将字符串列表作为输入并返回列表中的唯一值。
样品:
>>> unique_list(['cat', 'dog', 'cat', 'bug', 'dog', 'ant', 'dog', 'bug'])
['cat', 'dog', 'bug', 'ant']
我目前的代码:
def unique_list(input_list):
for word in input_list:
if word not in input_list:
output_list = [word]
return output_list
print(output_list)
我收到此错误:
> Traceback (most recent call last):
File "<pyshell#0>", line 1, in <module>
unique_list(['cat', 'dog', 'cat', 'bug', 'dog', 'ant', 'dog', 'bug'])
File "/Users/****/Desktop/University/CompSci 101/Lab Work/Lab 05/lab05_Homework.py", line 12, in unique_list
print(output_list)
UnboundLocalError: local variable 'output_list' referenced before assignment
我做错了什么?
答案 0 :(得分:4)
if
语句永远不会True
。
这是因为您从列表中获取word
,然后检查它是否在其中。没有意义,因为word
input_list
output_list
的唯一方法就是 。因此,您的'output_list'
永远不会被创建,因此当您尝试打印它时,您会在分配之前收到本地变量>>> print list(set(['cat', 'dog', 'cat', 'bug', 'dog', 'ant', 'dog', 'bug']))
['cat', 'dog', 'bug', 'ant']
引用的错误。
但是,我建议使用sets:
来获得独特元素的更简单方法list(your_set)
集合是&#34;无序的独特元素集合&#34;因此,当您将重复元素列表作为一个集合进行投射时,它将获得唯一的元素,然后您可以将其转换回列表,就像我上面使用output_list
打印它一样。
或者,如果这是某种编码习惯,并且您希望坚持使用您的方法,只需在方法中为def unique_list(input_list):
output_list = []
... #Rest of your code
添加初始化行,如下所示:
>>> nums = [0,1,2,3,4]
>>> for i in nums:
... if i not in nums:
... print 'True'
... else:
... print 'False'
False
False
False
False
False
{{1}}
答案 1 :(得分:1)
以下是您的代码的次要但重要的更改:
def unique_list(input_list):
output_list = []
for word in input_list:
if word not in output_list:
output_list.append(word)
print(output_list)
return output_list