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

标签 python python-3.x list set tuples

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

[(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 原生的,但如果您可以访问第 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/

相关文章:

python - 有人能用 Bullet 来 Colab 工作吗?

python - 删除 Pandas 中的单个和一系列列

python - 在 macOS High Sierra 上使用 Python 3 安装 OpenCV 的问题

python - 从列表中删除元素,而其他列表不会重置

python - 将包含特定单词的数组的索引存储到 Python 中的另一个数组中

list - 嵌套列表中的 Haskell `elem`

python - 来自外部调用的MySQL存储过程权限

python - 如何在django中制作像google表单一样的表单?用户可以在哪里根据需要添加或删除字段?用户最多可以添加10-20个字段?

python - Cumsum 作为现有 Pandas 数据中的新列

python - 检查 pygame 中的碰撞和停止速度