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

时间:2018-06-28 11:31:14

标签: python python-3.x list set tuples

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

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

它应该这样输出:

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

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

4 个答案:

答案 0 :(得分:11)

您可以先应用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))

答案 1 :(得分:2)

您可以对元组进行排序:

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

答案 2 :(得分:1)

其他答案全部起作用!我只是在这里发帖,因为我是初学者,我喜欢练习。

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)}

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

答案 3 :(得分:0)

您也可以使用理解力:

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