查找独特的元组列表,无论元组内的顺序如何

4

给定输入:

[('is','my','order'), ('my','order', 'is'), ('temp', 'ques'), ('ques','temp')]

期望输出:

[('is','my','order'), ('temp', 'ques')]

在输出中,元组的顺序或元组内容的顺序并不重要。

2
如果顺序不重要,也许考虑一开始就使用“set”(而不是元组)。 - ssp
3个回答

5

由于您不关心顺序,您可以使用 set 来实现:

>>> input_list = [('is','my','order'), ('my','order', 'is'), ('temp', 'ques'), ('ques','temp')]

>>> set(tuple(sorted(l)) for l in input_list)
set([('ques', 'temp'), ('is', 'my', 'order')])

首先,对于每个嵌套元组的内容进行排序,以确保您的集合将具有共同项目的元组视为相同。然后我再次将其强制转换为tuple,因为sorted返回的是不可哈希的list。 最后,set会删除元组中重复的条目。
更多详情请参阅"set"文档

只有在这里才可能存在不在初始数据中的选项。 - iqmaker

0

你可以对每个子列表进行排序,然后将它们添加到一个列表中,去除所有重复项。

output_list = []
for tup in map(sorted, tuple_list):
  if tup not in output_list:
    output_list.append(tup)
print(output_list)

0
mytuples = [('one','two'), ('two','one)]
myset=set()
for x in mytuples:
    myset.update(x)

print(myset)
output {'two', 'one'}

这将为您提供数据集中所有唯一值的集合。或许不是很有用。

因此,假设您想保留元组结构,您可能需要检查每个长度相同的元组与其他每个元组进行比较。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接