una tuplas tupla son qué que operaciones listas lista las funciones diccionarios datos con python python-3.x list set tuples

python - tuplas - Manera eficiente de hacer un conjunto de tupla en la que el orden de la tupla no importa



tupla en base de datos (4)

Quiero hacer un conjunto de tuplas en las que el orden de las tuplas no debería importar. Por ejemplo: si las tuplas que quiero agregar son:

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

Debe salir así:

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

¿Hay alguna forma eficiente de hacer esto en python?


¡El otro responde todo el trabajo! Solo voy a publicar el mío aquí porque soy un principiante y me encanta practicar.

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)

Devuelve

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

¡Si quieres usar esto o no depende de ti! Las otras respuestas son mucho más cortas.


Puede aplicar sorted y luego tuple , seguido de la conversión para set :

res = set(map(tuple, map(sorted, L))) print(res) {(1, 2), (1, 3)}

Explicación

Hay un par de buenas razones por las que no debe convertir cada tupla para set como paso inicial:

  1. Las tuplas (1, 1, 2) y (1, 2) serían iguales después de la conversión a set .
  2. Incluso en el caso de que estemos considerando tuplas de longitud 2, estaríamos agregando un supuesto de que tuple({(1, 2)}) y tuple({(2, 1)}) son iguales. Si bien esto puede ser cierto, se consideraría un detalle de la implementación, ya set se considera que el set está ordenado.

Composición de la función

La composición de la función no es nativa de Python, pero si tiene acceso a la biblioteca de toolz terceros, puede evitar el map anidado:

from toolz import compose tup_sort = compose(tuple, sorted) res = set(map(tup_sort, L))


Puedes ordenar las tuplas:

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


Puedes usar la comprensión, también:

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