输入:
glist = [1,4,2,5,2,2]
预期产出:
[1,4,2,5]
正如你所看到的,我只想删除重复项,我希望它的元素顺序相同
删除重复项的常用方法:
def remove(glist):
result = []
for ele in glist:
if ele not in result:
result.append(ele)
return result
但是,此代码将创建一个新列表,即result
。
我只是想删除重复项,没有创建新的列表/集。我希望return glist
如下所示
我的python:IDLE 3.3
谢谢你们!
预期代码的介绍:
def remove(glist):
'''code'''
return glist
答案 0 :(得分:2)
您可以使用OrderedDict
:
>>> glist = [1,4,2,5,2,2]
>>> from collections import OrderedDict
>>> glist = list(OrderedDict.fromkeys(glist))
>>> glist
[1, 4, 2, 5]
>>>
答案 1 :(得分:1)
假设内容是可清除的,您可以这样做,而无需在代码中创建任何列表对象:
def remove(glist):
seen = set()
def unseen():
for val in glist:
if not val in seen:
yield val
seen.add(val)
glist[:] = unseen()
return glist # if you must
这有点作弊,因为实际上glist[:] = unseen()
确实从生成器函数unseen()
的输出构造了一个列表,然后(有效地)将其内容传递给glist
。它实际上可能不构造一个列表对象,但它使用的内存大小与它相同,因为glist
的旧内容当然不会在新数组完成之前释放。
如果内容不耐用,或者你有足够的时间但没有多余的记忆,那么我想你必须以缓慢的方式去做:
idx = 0
while idx < len(glist):
if glist[idx] in glist[0:idx]:
del glist[idx]
else:
idx += 1
答案 2 :(得分:-1)
Alex的答案(完全有效)的简单版本将是:
glist = [1,4,2,5]
glist = set(glist)
print glist
一个集合不能有重复项,因此将一个列表放入集合中会删除所有重复项。