是否有内置功能可以从Python中的列表中删除重复项,同时保留顺序?我知道我可以使用一个集来删除重复项,但这会破坏原始顺序.我也知道我可以像这样滚动自己:
def uniq(input):
output = []
for x in input:
if x not in output:
output.append(x)
return output
Run Code Online (Sandbox Code Playgroud)
但是如果可能的话,我想利用内置或更多的Pythonic习语.
我有一个Python列表:
k = [[1, 2], [4], [5, 6, 2], [1, 2], [3], [4]]
Run Code Online (Sandbox Code Playgroud)
我想从中删除重复的元素.如果它是一个正常的列表而不是我可以使用的列表set.但不幸的是,该列表不可清除,也无法制作一组列表.只有元组.所以我可以将所有列表转换为元组,然后使用set并返回列表.但这并不快.
如何以最有效的方式完成?
上面列出的结果应该是:
k = [[5, 6, 2], [1, 2], [3], [4]]
Run Code Online (Sandbox Code Playgroud)
我不关心保留秩序.
注意:这个问题很相似,但不是我需要的.搜索了SO但没有找到确切的重复.
标杆:
import itertools, time
class Timer(object):
def __init__(self, name=None):
self.name = name
def __enter__(self):
self.tstart = time.time()
def __exit__(self, type, value, traceback):
if self.name:
print '[%s]' % self.name,
print 'Elapsed: %s' % (time.time() - self.tstart)
k = [[1, 2], [4], [5, 6, 2], [1, 2], [3], [5, 2], [6], …Run Code Online (Sandbox Code Playgroud) 给定一个字符串列表,我想按字母顺序对其进行排序并删除重复项.我知道我可以这样做:
from sets import Set
[...]
myHash = Set(myList)
Run Code Online (Sandbox Code Playgroud)
但我不知道如何按字母顺序从散列中检索列表成员.
我没有和哈希结婚,所以任何方法都可以实现.此外,性能不是问题,因此我更倾向于使用代码清楚地表达一个快速但更不透明的解决方案.