[英]Removing duplicates from a list of tuples in python
我有一个元组列表,我想删除重复的元组。 这样的事情。
x = [['aaron','jeng'],['sdf','wqd'],['aaron','jeng']]
我想要这样的输出:
y = [['aaron','jeng'],['sdf','wqd']]
我如何轻松地做到这一点? 我可以编写代码来做到这一点,但是对此有任何内置函数吗?
编辑1:正如每个人都建议的那样,很抱歉将它们称为元组。 我的意思是列表清单。 谢谢。
您的x值不包含元组列表,而是列表列表。 如果确实包含元组列表:
x = [('aaron','jeng'),('sdf','wqd'),('aaron','jeng')]
out = set([i for i in x])
print(list(out))
[('aaron', 'jeng'), ('sdf', 'wqd')]
那是一个列表列表...但是,无论如何,您可以使用一个临时集来确保没有重复:
x = [['aaron','jeng'],['sdf','wqd'],['aaron','jeng']]
seen = set() # store here the visited tuples
y = [e for e in x if tuple(e) not in seen and not seen.add(tuple(e))]
# [['aaron', 'jeng'], ['sdf', 'wqd']]
如果将内部列表预先转换为元组,则其性能会更好。
如果不需要保留顺序,则只需将内部列表转换为元组,然后将x
转换为set()
。
使用元组列表会很容易,您只需要set(x)
。 由于您的列表是列表列表,而不是元组列表,因此您可以先将它们转换:
set(tuple(i) for i in x)
返回:
{('aaron', 'jeng'), ('sdf', 'wqd')}
或者,如果您想按原样重新转换为列表列表:
[list(t) for t in (set(tuple(i) for i in x))]
# [['aaron', 'jeng'], ['sdf', 'wqd']]
您没有元组,列表中有列表。
x = [['aaron','jeng'],['sdf','wqd'],['aaron','jeng']]
uniques = list (set ( tuple(a) for a in x))
是将生成器表达式输入到集合中,然后又输入到列表中,从而导致
[('aaron', 'jeng'), ('sdf', 'wqd')]
您可以使用enumerate
和any
:
x = [['aaron','jeng'],['sdf','wqd'],['aaron','jeng']]
new_x = [[a, b] for i, [a, b] in enumerate(x) if not any(c == b for _, c in x[:i])]
输出:
[['aaron', 'jeng'], ['sdf', 'wqd']]
转换为字典该怎么办,因为字典可以具有唯一的键:
x = [['aaron','jeng'],['sdf','wqd'],['aaron','jeng']]
print({tuple(i):i for i in x}.values())
输出:
[['aaron', 'jeng'], ['sdf', 'wqd']]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.