我有一个需要过滤的值的排序列表,以便返回的唯一值与其左侧的值不同。
例如mylist = [1,2,2,3,3,3,3,6,7,9,9,11]将返回[1,2,3,6,7,9,11]。
我使用for和if循环完成了这项任务,但想知道是否使用列表推导没有更优雅的解决方案。
谢谢!
答案 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))
,如果您知道输入列表将始终排序,那么这应该是首选。