我想制作一组元组,其中元组的顺序无关紧要。 例如-如果我要添加的元组是:
[(1,2),(1,3),(2,1)]
它应该这样输出:
{(1,2),(1,3)}
在python中有什么有效的方法吗?
答案 0 :(得分:11)
您可以先应用sorted
,然后再应用tuple
,然后转换为set
:
res = set(map(tuple, map(sorted, L)))
print(res)
{(1, 2), (1, 3)}
说明
有两个很好的理由说明为什么您不应该将每个元组都转换为set
作为初始步骤:
(1, 1, 2)
后,(1, 2)
和set
的关系将相等。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)}