2024-05-21 12:45:33 发布
网友
In [1]: l1 = ['a',2,3,0,9.0,0,2,6,'b','a'] In [2]: l2 = list(set(l1)) In [3]: l2 Out[3]: ['a', 0, 2, 3, 6, 9.0, 'b']
在这里你可以看到列表l2以不同的顺序落下,然后是原始l1,我需要从列表中删除重复的元素,而不改变列表元素的顺序。。。。
这是我脑子里想出来的(用听写):
l1 = ['a',2,3,0,9.0,0,2,6,'b','a'] l2 = [] s = {} for i in l1: if not i in s: l2.append(i) s[i] = None # l2 contains ['a', 2, 3, 0, 9.0, 6, 'b', 'a']
编辑:使用集合(也在我的头顶上):
l1 = ['a',2,3,0,9.0,0,2,6,'b','a'] l2 = [] s = set() for i in l1: if not i in s: l2.append(i) s.add(i)
如果你不关心效率,这是O(n*m)
>>> sorted(set(l1), key=l1.index) ['a', 2, 3, 0, 9.0, 6, 'b']
使用中间dict比较复杂,但它是O(n+m*logm)
其中n是l1中的元素数,m是l1中的唯一元素数
>>> l1 = ['a',2,3,0,9.0,0,2,6,'b','a'] >>> d1=dict((k,v) for v,k in enumerate(reversed(l1))) >>> sorted(d1, key=d1.get, reverse=True) ['a', 2, 3, 0, 9.0, 6, 'b']
在Python3.1中,您已经订购了dict,因此非常简单
>>> l1 = ['a',2,3,0,9.0,0,2,6,'b','a'] >>> list(OrderedDict.fromkeys(l1)) ['a', 2, 3, 0, 9.0, 6, 'b']
您可以通过定义这样的函数来解决它:
def dedupe(items): seen = set() for item in items: if item not in seen: yield item seen.add(item)
使用它:
>>> l1 = ['a',2,3,0,9.0,0,2,6,'b','a'] >>> l2 = list(dedupe(l1)) >>> l2 ['a', 2, 3, 0, 9.0, 6, 'b']
这是我脑子里想出来的(用听写):
编辑:使用集合(也在我的头顶上):
如果你不关心效率,这是O(n*m)
使用中间dict比较复杂,但它是O(n+m*logm)
其中n是l1中的元素数,m是l1中的唯一元素数
在Python3.1中,您已经订购了dict,因此非常简单
您可以通过定义这样的函数来解决它:
使用它:
相关问题 更多 >
编程相关推荐