繁体   English   中英

从python中的元组列表中删除重复项

[英]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')]

您可以使用enumerateany

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM