2014-03-29 70 views
0

我只是想简单的列表,它删除重复的数字重复号在列表中删除在python

a = [2,3,4,4,4,4,5,6,7,8,9,9,9,9,0] 
m = [] 
def single_digit_list(a): 
    return [m.append(x) for x in a if x not in m] 

打印“新目录”,single_digit_list(一)

我预计,新的名单给了我一个数字列表中不重复,但我得到下面的输出

新的列表[无,无,无,无,无,无,无,无,无]

我无法理解在

简单的东西去知道什么是错的代码

+0

我更新了我的答案回答你的问题 – sshashank124

+0

list.append不返回任何东西。所以m.append结果列表将是一个None列表。尝试'[(m.append(x),x)[1] for x in a x not in m]'。 – werehuman

+3

@werehuman不要暗示。在LC中有副作用是不好的。 – thefourtheye

回答

3

使用设置为删除重复:

m=set(a) 

如果你想输出为列表:

m=list(set(a)) 

你的代码是好的..你只需要返回m ...而不是返回append的返回值...对于前者,print m.append(10)将打印None这实际上是append的返回值,您不打印m。

a = [2,3,4,4,4,4,5,6,7,8,9,9,9,9,0] 
def single_digit_list(a): 
    m = [] 
    [m.append(x) for x in a if x not in m] 
    return m #you have appended elements to m 
+0

感谢您的快速回答,但我只是想知道代码中出现了什么问题 – cool

+0

您的代码是好的。您只需返回m ...而不是返回append的返回值...对于ex,打印一个。追加(10)将打印无,这实际上是追加的返回值,您不打印一个。 – user3

+0

'list(set(a))'可能是最好的选择。使用列表推导只是为了运行命令并将其扔掉不能是pythonic。 – Jae

2

你试图返回,所有的名单都没有列表的列表:

如下返回列表你可以修改你的代码。 这是因为m.append()不返回任何东西,你想创造什么m.append回报 只要做到这一点作为一个列表:

def single_digit_list(a): 
    m = [] 
    for x in a: 
     if x not in m: 
      m.append(x) 
    return m 

>>> print single_digit_list([2,3,4,4,4,4,5,6,7,8,9,9,9,9,0]) 
[2,3,4,5,6,7,8,9,0] 
+0

感谢您的详细解释,原因是m.append()。所以,你可以告诉我任何另一种方式来做到这一点,因为我只是想在代码中学习,如果语句如代码。 – cool

+0

@ user3459261,或者正如我在上面的回答中所示或按user3的建议(第一个答案) – sshashank124

1

如果您的列表已分组,您可以使用groupby

>>> x = [1, 1, 4, 4, 4, 5, 2, 2, 2, 3, 3] 
>>> from itertools import groupby 
>>> print [i[0] for i in groupby(x)] 
[1, 4, 5, 2, 3] 

此解决方案不会破坏元素顺序而不是转换为集合。

0

为什么会得到None值的列表的原因是:

  1. 列表解析是使用生成的列表解析里给出的expression返回一个列表的基础。

如:[ expression for item in list if conditional ]

所以,你的情况要附加一个项目到一个列表,其中追加的项目,如果它成功地追加后返回None。

如:

>>> ls = [] 
>>> print ls.append('a') 
None 
>>> 

所以,在列表理解的结尾,您的列表m得到了正确的唯一元素列表,但返回的列表中是None值的列表的理解产生。

结论:

您可以修复,通过返回的m值不是列表解析的结果。

或者这里是使用字典的键另一种简单的解决方案:

>>> a = [2,3,4,4,4,4,5,6,7,8,9,9,9,9,0] 
>>> dict.fromkeys(a).keys() 
[0, 2, 3, 4, 5, 6, 7, 8, 9] 
>>>