Python:使用列表推导列表过滤

时间:2014-01-11 20:23:30

标签: python filter list-comprehension

我有一个需要过滤的值的排序列表,以便返回的唯一值与其左侧的值不同。

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

我使用for和if循环完成了这项任务,但想知道是否使用列表推导没有更优雅的解决方案。

谢谢!

3 个答案:

答案 0 :(得分:3)

我认为没有办法用列表理解来做到这一点,但更好的方法是:

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

答案 1 :(得分:1)

您可以尝试这样的事情:

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

答案 2 :(得分:0)

已排序列表中,根据定义,它与list(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]

或者:

from itertools import zip_longest

[tup[0] for tup in zip_longest(mylist,mylist[1:]) if len(set(tup)) == 2]
Out[11]: [1, 2, 3, 6, 7, 9, 11]

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

正如您所看到的,这两者的可读性都低于list(set(mylist)),如果您知道输入列表将始终排序,那么这应该是首选。