制作一组元组的有效方法,其中元组的顺序无关紧要



我想制作一组元组,其中元组的顺序无关紧要。 例如.- 如果我要添加的元组是:

[(1,2),(1,3),(2,1)]

它应该像这样输出:

{(1,2),(1,3)}

在python中有什么有效的方法吗?

您可以应用sorted然后tuple,然后转换为set

res = set(map(tuple, map(sorted, L)))
print(res)
{(1, 2), (1, 3)}

解释

有几个很好的理由说明为什么不应该将每个元组转换为set作为初始步骤:

  1. 元组(1, 1, 2)(1, 2)在转换为set后将变得相等。
  2. 即使在我们考虑长度为 2 的元组的情况下,我们也会添加一个假设,即tuple({(1, 2)})tuple({(2, 1)})相等。虽然这可能是真的,但它将被视为实现细节,因为set被认为是无序的。

功能组成

函数组合不是 Python 原生的,但如果您可以访问第三方toolz库,则可以避免嵌套map

from toolz import compose
tup_sort = compose(tuple, sorted)
res = set(map(tup_sort, L))

您可以对元组进行排序:

l = [(1,2),(1,3),(2,1)]
res = set(map(lambda x: tuple(sorted(x)), l))
print(res)
{(1, 2), (1, 3)}

其他答案都有效!我只是要在这里发布我的,因为我是初学者,我喜欢练习。

mainSet = set()
l = [(1,2),(1,3),(2,1)]
for i in l:
if tuple(sorted(i)) not in mainSet:
mainSet.add(tuple(sorted(i)))
print(mainSet)

回馈社会

{(1, 2), (1, 3)}

是否要使用它取决于您!其他答案要短得多。

你也可以使用理解:

l=[(1, 2), (1, 3), (2, 1)]
res={ tuple(sorted(t)) for t in l }
print(res)
{(1, 2), (1, 3)}

相关内容

最新更新