去除 List 中重复元素
1
9hills 2015-01-11 17:32:56 +08:00 1
set下,list顺序就变了。你再list也没用
保持顺序: a = set() l2 = [i for i in l1 if not (i in a or a.add(i))] |
2
dant 2015-01-11 21:33:41 +08:00 via iPhone
话说有没有 orderedset (
|
4
zergling 2015-01-11 22:04:39 +08:00
或者:
from collections import OrderedDict l2 = OrderedDict(zip(l1, l1)).keys() |
5
deepurple 2015-01-11 22:55:14 +08:00
刚看那个董伟明的《Python高级编程》的视频里讲到了这个
|
6
raquelken 2015-01-12 11:53:09 +08:00
@zergling 用dict的key去重必须是list元素是可以hashed的,而且还有这个方法 {}.fromkeys(mylist).keys()
|
7
dongweiming 2015-01-14 23:45:19 +08:00 1
@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 |