在python中删除列表中的重复数字

在python中删除列表中的重复数字,python,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] 打印新列表,单数列表a 我希望新列表给了我列表中的一个数字,但没有重复,但我得到了以下输出 新列表[无,无,无,无,无,无,无,无,无,无] 我不明白发生了什么事 简单了解代码中的错误使用set删除重复项: m=set(a)

我只想简单的列表,删除重复的数字

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]
打印新列表,单数列表a

我希望新列表给了我列表中的一个数字,但没有重复,但我得到了以下输出

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

我不明白发生了什么事


简单了解代码中的错误

使用set删除重复项:

 m=set(a) 
如果希望输出为列表,请执行以下操作:

m=list(set(a) )

您的代码很好。您只需返回m…而不是返回append的返回值…对于ex,print m.append10将不打印任何内容,这实际上是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 

使用“设置”删除重复项:

 m=set(a) 
如果希望输出为列表,请执行以下操作:

m=list(set(a) )

您的代码很好。您只需返回m…而不是返回append的返回值…对于ex,print m.append10将不打印任何内容,这实际上是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 

您正在尝试返回一个列表列表,其中所有列表均为空。 这是因为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]

您正在尝试返回一个列表列表,其中所有列表均为空。 这是因为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]

如果列表已分组,则可以使用


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

如果列表已分组,则可以使用


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

获得无值列表的原因是:

列表理解用于根据列表理解中给定表达式的返回生成列表。 例如:[列表中项目的表达式,如果有条件]

因此,在您的例子中,您正在将一个项目追加到一个列表中,如果项目追加成功,则在追加该项目后返回None

例如:

因此,在列表理解结束时,列表m得到了正确的唯一元素列表,但返回了理解生成的列表,它是一个无值列表

结论:

您可以通过返回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]
>>>

您得到无值列表的原因是:

列表理解用于根据列表理解中给定表达式的返回生成列表。 例如:[列表中项目的表达式,如果有条件]

因此,在您的例子中,您正在将一个项目追加到一个列表中,如果项目追加成功,则在追加该项目后返回None

例如:

因此,在列表理解结束时,列表m得到了正确的唯一元素列表,但返回了理解生成的列表,它是一个无值列表

结论:

您可以通过返回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]
>>>

感谢您的快速回答,但我只想知道代码中的错误您的代码是好的。您只需返回m…而不是返回append的返回值…例如,打印a.append10将不打印任何内容,这实际上是append的返回值,您没有打印a.listseta可能是最好的方法。不过,使用列表理解来运行命令并扔掉它并不是什么好办法。谢谢你的快速回答,但我只想知道代码中的错误你的代码是好的。你只需要返回m…而不是返回append的返回值…例如,print a.append10将不打印任何实际上是append的返回值,您没有打印a。listseta可能是最好的方法。不过,仅仅使用列表理解来运行命令并将其扔掉并不是什么好办法。我更新了答案以回答您的问题列表。append不会返回任何内容。所以m.append结果的列表将是一个无的列表。如果x不在m中,请尝试[m.appendx,x[1]代表a中的x]。LC有副作用是不好的。我更新了我的答案以回答您的问题列表。append不会返回任何内容。所以m.append结果的列表将是一个无的列表。如果x不在m中,请尝试[m.appendx,x[1]代表a中的x]。在LC中产生副作用是不好的。感谢您的详细解释,原因是m.append。所以您能告诉我其他方法吗,因为我只想学习代码中的combine for and if语句。@user3459261,如我在上面的回答中所示,或者如user3建议的第一个答案感谢您的详细解释,原因是m.append。所以您能告诉我其他方法吗?因为我只想学习代码中的combine for and if语句。@user3459 261,如我在上面的答案中所示,或者如用户3建议的第一个答案所示