¿Cómo escoger ciertos elementos de x-tupla devueltos por una función?
-
19-09-2019 - |
Pregunta
Soy un novato en Python. Considere la str.partition()
función que devuelve un 3-tupla. Si estoy interesado en sólo elementos 0 y 2 de esta tupla, ¿cuál es la mejor manera de elegir sólo ciertos elementos de una tupla tal?
Puedo hacer actualmente, ya sea:
# Introduces "part1" variable, which is useless
(part0, part1, part2) = str.partition(' ')
O:
# Multiple calls and statements, again redundancy
part0 = str.partition(' ')[0]
part2 = str.partition(' ')[2]
Me gustaría ser capaz de hacer algo como este, pero no puede:
(part0, , part2) = str.partition(' ')
# Or:
(part0, part2) = str.partition(' ')[0, 2]
Solución
subrayado se utiliza a menudo como un nombre para cosas que no necesita, así que algo como esto funcionaría:
part0, _, part2 = str.partition(' ')
En este caso particular, se puede hacer esto, pero no es una solución bastante:
part0, part2 = str.partition(' ')[::2]
Una solución más esotérico:
from operator import itemgetter
part0, part2 = itemgetter(0, 2)(str.partition(' '))
Otros consejos
Así es, usted no puede tomar varios elementos ad hoc fuera de una lista de tuplas de una sola vez.
part0, part1, part2 = str.partition(' ')
es el camino a seguir. No se preocupe por part1, si usted no lo necesita, no lo necesita. Es común llamarlo "ficticia" o "sin usar" para demostrar que no se utiliza.
Puede ser feo con:
part0, part2 = str.partition(' ')[::2]
En este caso específico, pero eso no es agradable ofuscar y hacia los demás. ;)
Creo que una pregunta que hice hace algún tiempo podría ayudarle a:
manera Pythonic para obtener algunas filas de una matriz
NumPy le da la sintaxis rebanada desea extraer varios elementos utilizando una tupla o lista de índices, pero no creo que desea convertir usted lista de cadenas a un numpy.array sólo para extraer algunos elementos , así que tal vez usted podría escribir un ayudante:
def extract(lst, *indices):
return [lst[i] for i in indices]
item0, item2 = extract(str.partition(' '), 0, 2)
también se puede utilizar en lugar de str.split(' ', 1)
str.partition(' ')
que pondremos en una lista en lugar de una tupla, pero no se va a volver el separador
Esta es la forma en que lo haría:
all_parts = str.partition(' ')
part0, part2 = all_parts[0], all_parts[2]