我想制作一组元组,其中元组的顺序无关紧要。 例如.- 如果我要添加的元组是:
[(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, 2)
和(1, 2)
在转换为set
后将变得相等。 - 即使在我们考虑长度为 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)}