¿Cómo distinguir entre una tupla y una lista en el patrón estructural de coincidencia en Python?
Quiero usar el emparejamiento de patrones estructural de Python para distinguir entre una tupla (por ejemplo, que representa un punto) y una lista de tuplas.
Sin embargo, el enfoque directo no funciona:
python
def fn(p):
match p:
case (x, y):
print(f"punto individual: ({x}, {y})")
case [*points]:
print("lista de puntos:")
for x, y in points:
print(f"({x}, {y})")
fn((1, 1))
fn([(1, 1), (2, 2)])
que produce el siguiente resultado:
punto individual: (1, 1)
punto individual: ((1, 1), (2, 2))
mientras que lo que quiero es:
punto individual: (1, 1)
lista de puntos:
(1, 1)
(2, 2)
Cambiar el orden de las declaraciones case tampoco ayuda aquí.
¿Cuál es una buena manera de resolver esto con el emparejamiento de patrones?
davy.ai
Un enfoque es utilizar la función
isinstance
para comprobar el tipo del argumento antes de intentar hacer coincidir:lo que produce el siguiente resultado: