Ignorar parte de una tupla de python

2 minutos de lectura

avatar de usuario
jim jeffries

Si tengo una tupla como (1,2,3,4) y quiero asignar 1 y 3 a las variables a y b obviamente podría decir

myTuple = (1,2,3,4)
a = myTuple[0]
b = myTuple[2]

o algo como

(a,_,b,_) = myTuple

¿Hay alguna manera de descomprimir los valores, pero ignorar uno o más de ellos?

  • a, _, b = myTuple es un modismo bastante común. Para ser honesto, no veo mucho de malo en ello.

    – ENP

    2 de marzo de 2012 a las 11:35


  • ¿Cuál es el problema de tener _ == 2? Nadie nunca va a usar _ después en el código.

    –Rik Poggi

    2 de marzo de 2012 a las 11:36


  • ¿Qué pasa si quiero ignorar dos partes de la tupla? Actualizaré la pregunta.

    –Jim Jeffries

    2 de marzo de 2012 a las 11:41

  • @Rik … a menos que usen el obtener texto biblioteca.

    – Lauritz V. Thaulow

    2 de marzo de 2012 a las 11:42

Yo personalmente escribiría:

a, _, b = myTuple

Este es un modismo bastante común, por lo que es ampliamente entendido. Encuentro la sintaxis muy clara.

  • Me gustaría señalar que en el intérprete de Python _ se asigna al resultado de la última expresión (por lo que si escribe 'hi' y pulsa enter entonces _ is 'hi') hasta que haga algo como esto en el que le asigne un valor, entonces nunca funcionará como lo hacía antes.

    – 2rs2ts

    13/10/2015 a las 17:47

  • @ 2rs2ts para completar: _ volverá a funcionar como suele hacerlo cuando su variable asignada localmente _ deja alcance, por ejemplo, cuando finaliza una función envolvente. Para forzar que esto suceda en un punto específico de su programa, puede usar del _; esto elimina explícitamente su variable definida localmente, _que desenmascara el valor global, _.

    – Crepe Cabra

    6 de abril de 2018 a las 18:19

Tu solución está bien en mi opinión. Si realmente tiene un problema con la asignación de _, entonces podría definir una lista de índices y hacer:

a = (1, 2, 3, 4, 5)
idxs = [0, 3, 4]
a1, b1, c1 = (a[i] for i in idxs)

puede usar *_ para capturar un número desconocido de elementos, por ejemplo

first, *_, one_before_last, _ = 1,2,3,4,5,6,7,8,9

da:

primero = 1
uno_antes_del_último = 8

  • Correcto, pero aclararía que esto solo funciona para Python3.

    – Ataxias

    9 de diciembre de 2021 a las 7:22

  • solo hay python 3

    – o17t H1H’ S’k

    9 de diciembre de 2021 a las 13:19

  • Su declaración anterior es demostrablemente falsa. Nos guste o no, existen innumerables códigos heredados que usan Python2, y sería útil saber qué es compatible con versiones anteriores y qué no (esa es la razón por la que IDE ofrece exactamente esta información).

    – Ataxias

    10 dic 2021 a las 20:03

Tenga en cuenta que puede dividir la tupla de origen, así en su lugar:

a,b = some_tuple[0:2]

¿Ha sido útil esta solución?