是否有内置功能可以从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习语.
给定一个字符串列表,我想按字母顺序对其进行排序并删除重复项.我知道我可以这样做:
from sets import Set
[...]
myHash = Set(myList)
Run Code Online (Sandbox Code Playgroud)
但我不知道如何按字母顺序从散列中检索列表成员.
我没有和哈希结婚,所以任何方法都可以实现.此外,性能不是问题,因此我更倾向于使用代码清楚地表达一个快速但更不透明的解决方案.
例如:
>>> x = [1, 1, 2, 'a', 'a', 3]
>>> unique(x)
[1, 2, 'a', 3]
Run Code Online (Sandbox Code Playgroud)
假设列表元素是可清除的.
澄清:结果应该保留列表中的第一个副本.例如,[1,2,3,2,3,1]变为[1,2,3].
如果想要根据每个嵌套列表的第一个元素评估重复项,是否有人可以建议一个很好的解决方案来从嵌套列表中删除重复项?
主要列表如下所示:
L = [['14', '65', 76], ['2', '5', 6], ['7', '12', 33], ['14', '22', 46]]
Run Code Online (Sandbox Code Playgroud)
如果在第一个位置存在另一个[k][0]已经发生相同元素的列表,那么我想删除该列表并得到以下结果:
L = [['14', '65', 76], ['2', '5', 6], ['7', '12', 33]]
Run Code Online (Sandbox Code Playgroud)
你能建议一种算法来实现这个目标吗?
如何使用列表推导从列表中删除重复项?我有以下代码:
a = [1, 2, 3, 3, 5, 9, 6, 2, 8, 5, 2, 3, 5, 7, 3, 5, 8]
b = []
b = [item for item in a if item not in b]
Run Code Online (Sandbox Code Playgroud)
但它不起作用,只产生相同的列表.为什么它产生相同的清单?
我正在将一个列表转换为Python中的一个集合,如下所示:
request.session['vote_set'] = set(request.session['vote_set'])
Run Code Online (Sandbox Code Playgroud)
所以我可以轻松地进行if x in set查找并消除重复.然后,当我完成后,我重新转换它:
request.session['vote_set'] = list(request.session['vote_set'])
Run Code Online (Sandbox Code Playgroud)
有一个更好的方法吗?我可能会做一些危险(或愚蠢)的事情吗?
我已经阅读了很多方法,可以在保留订单的同时从python列表中删除重复项.所有的方法似乎都需要创建一个函数/子例程,我认为这个算法效率不高.我想出了以下内容,我想知道这是否是计算效率最高的方法?(由于需要快速响应时间,我对此的使用必须是最有效的.)谢谢
b=[x for i,x in enumerate(a) if i==a.index(x)]
Run Code Online (Sandbox Code Playgroud)