Python:使用列表理解进行列表过滤

Python:使用列表理解进行列表过滤,python,filter,list-comprehension,Python,Filter,List Comprehension,我有一个需要筛选的值的排序列表,以便返回的值与左边的值不同 例如,mylist=[1,2,2,3,3,3,3,3,6,7,9,9,11]将返回[1,2,3,6,7,9,11] 我已经使用for和if循环完成了这项任务,但我想知道是否有一个更优雅的解决方案使用列表理解 谢谢 我认为没有一种方法可以通过列表理解来实现,但更好的方法是: mylist=[1,2,2,3,3,3,3,6,7,9,9,11] uniqueList = list(set(mylist)) 我不认为有一种方法可以通过列表理解

我有一个需要筛选的值的排序列表,以便返回的值与左边的值不同

例如,mylist=[1,2,2,3,3,3,3,3,6,7,9,9,11]将返回[1,2,3,6,7,9,11]

我已经使用for和if循环完成了这项任务,但我想知道是否有一个更优雅的解决方案使用列表理解


谢谢

我认为没有一种方法可以通过列表理解来实现,但更好的方法是:

mylist=[1,2,2,3,3,3,3,6,7,9,9,11]
uniqueList = list(set(mylist))

我不认为有一种方法可以通过列表理解来实现,但更好的方法是:

mylist=[1,2,2,3,3,3,3,6,7,9,9,11]
uniqueList = list(set(mylist))

您可以尝试以下方法:

>>> m=set( mylist)
>>> m
set([1, 2, 3, 6, 7, 9, 11])

您可以尝试以下方法:

>>> m=set( mylist)
>>> m
set([1, 2, 3, 6, 7, 9, 11])

在排序的列表中,根据定义,这与
列表(set(mylist))
相同,它只是对列表进行了唯一化

但是,打一点代码高尔夫,因为你要的是一份清单,有一个迷人的:

seen = set()

[x for x in mylist if x not in seen and not seen.add(x)]
Out[3]: [1, 2, 3, 6, 7, 9, 11]
或:

后者也适用于您对未排序列表的要求


正如您所看到的,这两个列表的可读性都不如
list(set(mylist))
,如果您知道输入列表将始终被排序,则应首选

排序的列表中,根据定义,这与
列表(set(mylist))
相同,后者只是对列表进行了唯一化

但是,打一点代码高尔夫,因为你要的是一份清单,有一个迷人的:

seen = set()

[x for x in mylist if x not in seen and not seen.add(x)]
Out[3]: [1, 2, 3, 6, 7, 9, 11]
或:

后者也适用于您对未排序列表的要求


正如您所看到的,这两个列表的可读性都不如
list(set(mylist))
,如果您知道输入列表将始终被排序,则最好使用该列表。

谢谢@roippi。你能解释一下解决方案1背后的机制吗?在理解“and not seen.add(x)”如何过滤列表时有点困难。@user2957824这是代码部分
set.add
不会返回任何内容,因此该部分等同于
,而不是None
,这始终是真的。它还将
x
添加到
集合
,因此看到的
x的第二次是
True
,它会被过滤掉。谢谢@roippi。你能解释一下解决方案1背后的机制吗?在理解“and not seen.add(x)”如何过滤列表时有点困难。@user2957824这是代码部分
set.add
不会返回任何内容,因此该部分等同于
,而不是None
,这始终是真的。它还将
x
添加到
集合
,因此看到的
x周围的第二次
True
,并将其过滤掉。