mylist = list(set(mylist))

2015-01-11 16:12:10 +08:00
 jacklong

去除 List 中重复元素

3342 次点击
所在节点    Python
7 条回复
9hills
2015-01-11 17:32:56 +08:00
set下,list顺序就变了。你再list也没用

保持顺序:
a = set()
l2 = [i for i in l1 if not (i in a or a.add(i))]
dant
2015-01-11 21:33:41 +08:00
话说有没有 orderedset (
yiding
2015-01-11 21:52:49 +08:00
@dant 集合是三大特性之一,无序性
zergling
2015-01-11 22:04:39 +08:00
或者:
from collections import OrderedDict
l2 = OrderedDict(zip(l1, l1)).keys()
deepurple
2015-01-11 22:55:14 +08:00
刚看那个董伟明的《Python高级编程》的视频里讲到了这个
raquelken
2015-01-12 11:53:09 +08:00
@zergling 用dict的key去重必须是list元素是可以hashed的,而且还有这个方法 {}.fromkeys(mylist).keys()
dongweiming
2015-01-14 23:45:19 +08:00
@deepurple 我来填坑: 标准答案是这里 https://docs.python.org/2/faq/programming.html#id40

以上都是一些trick

In [1]: mylist = ['a', 'b', 'r', 'a', 'b', 'k', 'v', 'b']

In [2]: %timeit list(set(mylist))
The slowest run took 7.63 times longer than the fastest. This could mean that an intermediate result is being cached
1000000 loops, best of 3: 781 ns per loop

In [3]: %timeit {}.fromkeys(mylist).keys()
The slowest run took 4.30 times longer than the fastest. This could mean that an intermediate result is being cached
1000000 loops, best of 3: 887 ns per loop

In [4]: from collections import OrderedDict

In [5]: %timeit OrderedDict.fromkeys(mylist).keys()
The slowest run took 11.18 times longer than the fastest. This could mean that an intermediate result is being cached
100000 loops, best of 3: 18.5 µs per loop

In [6]: %timeit list({}.fromkeys(mylist))
The slowest run took 5.99 times longer than the fastest. This could mean that an intermediate result is being cached
1000000 loops, best of 3: 995 ns per loop

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/161136

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX