我想创建一组元组,其中元组的顺序无关紧要。 例如-如果我要添加的元组是:
[(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 原生的,但如果您可以访问第 3 方 toolz
可以避免嵌套 map
的库:
from toolz import compose
tup_sort = compose(tuple, sorted)
res = set(map(tup_sort, L))
关于python - 制作一组元组的有效方法,其中元组的顺序无关紧要,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51081841/