时
list(set(some_list))
从列表中删除重复项的好方法? (Python 3.3如果重要的话)
(编辑以解决一些评论......之前可能过于简洁了。)
具体地,
答案 0 :(得分:4)
您展示的方法可能是最短且最容易理解的;这将使大多数定义成为Pythonic。
如果您需要保留列表的顺序,可以使用collections.OrderedDict
代替set
:
list(collections.OrderedDict((k, None) for k in some_list).keys())
如果元素不可散列但可以排序,您可以使用itertools.groupby
删除重复项:
list(k for k,g in itertools.groupby(sorted(some_list)))
答案 1 :(得分:3)
(正如评论中所建议的那样,也将此评论添加为答案。)
你自己的解决方案对我来说看起来很好而且非常Pythonic。如果你正在使用Numpy,你也可以new_list = numpy.unique(some_list)
。这或多或少“读起来就像一句话”,我相信这对于“Pythonic”来说总是一个很好的基准。
答案 2 :(得分:1)
保持最短的顺序(从Python 2.7开始):
>>> from collections import OrderedDict
>>> list(OrderedDict.fromkeys('abracadabra'))
['a', 'b', 'r', 'c', 'd']
如果没有必要保留订单list(set(...))
就好了。