Estoy haciendo una tarea en la que quiere que imprima los apellidos de una lista de nombres. También dice que solo necesito 2-3 líneas adicionales de código máximo. ¿Cómo haría esto?

Esta es una lección sobre listas y siempre he tenido problemas con la indexación de listas, pero esto me lleva más allá de lo que puedo pensar.

Aquí está mi código con la lista que proporcionaron:

names = [
    "Maya Angelou",
    "Chimamanda Ngozi Adichie",
    "Tobias Wolff",
    "Sherman Alexie",
    "Aziz Ansari"
]

# Your code here...
name = [names[i].split() for i in range(len(names))]
print(name)

El resultado esperado es:

['Angelou', 'Adichie', 'Wolff', 'Alexie', 'Ansari']

Mi resultado:

[['' Maya ',' Angelou '], [' Chimamanda ',' Ngozi ',' Adichie '], [' Tobias ',' Wolff '], [' Sherman ',' Alexie '], [' Aziz ', 'Ansari']]

-1
user12148811 3 oct. 2019 a las 15:55

3 respuestas

La mejor respuesta

Solo usa print([i[-1] for i in name]) en lugar de print(name)

De hecho, esto imprime ['Angelou', 'Adichie', 'Wolff', 'Alexie', 'Ansari']

1
Neofytos Boufidis 3 oct. 2019 a las 13:00

Su código está completamente bien, solo necesita tomar la segunda variable después de dividir el nombre:

names = [my_names[i].split()[1:] for i in range(len(my_names))]

Y agregue una línea para unir los nombres si hay dos apellidos más o menos.

Todo el código:

my_names = [
    "Maya Angelou",
    "Chimamanda Ngozi Adichie",
    "Tobias Wolff",
    "Sherman Alexie",
    "Aziz Ansari"
]

# Your code here...
names = [my_names[i].split()[1:] for i in range(len(my_names))]
fixed_names = [' '.join(name) for name in names]
print(fixed_names)
0
Yoel Nisanov 3 oct. 2019 a las 13:00
names = [
    "Maya Angelou",
    "Chimamanda Ngozi Adichie",
    "Tobias Wolff",
    "Sherman Alexie",
    "Aziz Ansari"
]

for current_name in names:
    print(current_name.split()[-1])

Salida:

Angelou
Adichie
Wolff
Alexie
Ansari

Para cada nombre en su lista de nombres, tome el nombre actual, divídalo en espacios en blanco e imprima el último elemento de la lista resultante.

Si realmente quieren que el resultado se vea como una lista, puede cambiarlo a una lista de comprensión:

names = [
    "Maya Angelou",
    "Chimamanda Ngozi Adichie",
    "Tobias Wolff",
    "Sherman Alexie",
    "Aziz Ansari"
]

last_names = [current_name.split()[-1] for current_name in names]
print(last_names)

Salida:

['Angelou', 'Adichie', 'Wolff', 'Alexie', 'Ansari']
0
user10987432 3 oct. 2019 a las 12:59
58219617