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]
¿Fue útil?

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]
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top