Python从列表中返回唯一的字符串

时间:2014-04-05 13:38:37

标签: python list

编写一个函数,该函数将字符串列表作为输入并返回列表中的唯一值。

样品:

>>> 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

我做错了什么?

2 个答案:

答案 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