Estaba intentando concatenar dos listas, que son 'Nombres' y 'Edades'. Pero quería hacer eso agregando su índice de [i + 1] cada vez a otra lista. Entonces, en lugar de ['John', '17', 'Mike', '21'], Mi objetivo era que cada par tuviera un índice diferente y fuera un elemento de lista. Así -> [['John', ' 17 '], [' Mike ',' 21 ']]
(Nota: sé que puedo hacer eso con la función zip (), esto es para practicar)
Así que terminé con ese código ->
names = ['Ana', 'John', 'Bob', 'Mike', 'July']
ages = ['17', '22', '33', '8', '76']
a = []
b = []
for i in range(len(names)):
a.append(names[i])
a.append(ages[i])
b.append([] + a)
a.clear()
print(b)
Salida -> [['Ana', '17'], ['John', '22'], ['Bob', '33'], ['Mike', '8'], ['julio', '76']]
Como puede ver, logré hacer eso, pero lo extraño es que la línea b.append ([] + a). Obtuve lo que quiero accidentalmente, cuando escribo b.append (a) devuelve una lista b vacía. Pero al seguir la ruta en el código adjunto, estoy logrando lo que estoy tratando de hacer. ¿Alguien puede explicar por qué esto está funcionando? No pude cogerlo.
Gracias de antemano.
3 respuestas
Agregar impresiones en el código muestra que b se 'borra' después del ciclo, y no estaba almacenando la información correcta dentro del ciclo. Esencialmente son copias del mismo a
:
names = ['Ana', 'John', 'Bob', 'Mike', 'July']
ages = ['17', '22', '33', '8', '76']
a = []
b = []
for i in range(len(names)):
a.append(names[i])
a.append(ages[i])
print(a)
b.append(a)
print(b)
a.clear()
print(b)
['Ana', '17']
[['Ana', '17']]
['John', '22']
[['John', '22'], ['John', '22']]
['Bob', '33']
[['Bob', '33'], ['Bob', '33'], ['Bob', '33']]
['Mike', '8']
[['Mike', '8'], ['Mike', '8'], ['Mike', '8'], ['Mike', '8']]
['July', '76']
[['July', '76'], ['July', '76'], ['July', '76'], ['July', '76'], ['July', '76']]
[[], [], [], [], []]
Esto se debe a que las listas son mutables en Python. Cuando lo borra, los datos a los que apunta b también se eliminan. Cuando lo hace []+a
, está creando una nueva lista que ya no es una referencia a a
. Al cambiar el código de esta manera, puede obtener lo que desea:
names = ['Ana', 'John', 'Bob', 'Mike', 'July']
ages = ['17', '22', '33', '8', '76']
b = []
for i in range(len(names)):
a = []
a.append(names[i])
a.append(ages[i])
b.append(a)
print(b)
Para ayudarlo a comprender lo que quiero decir con mutable, vea el siguiente ejemplo:
a = ['some data']
b = [a]
print(b)
a.clear()
print(b)
[['some data']]
[[]]
Y esta es la razón por la que a+[]
funciona:
a = ['some data']
b = [a+[]]
print(b)
a.clear()
print(b)
[['some data']]
[['some data']]
Si ambas listas tienen el mismo número de elementos, entonces puede usar la función zip ().
Nota: La función zip () solo iterará hasta que pase la lista más pequeña.
list1=[]
for x,y in zip(names,ages):
list1.append([x,y])
print(list1)
La siguiente es mi solución utilizando una lista de comprensión.
names = ['Ana', 'John', 'Bob', 'Mike', 'July']
ages = ['17', '22', '33', '8', '76']
new_list = [ [names[i], ages[i]] for i in range(len(names))]
print(new_list)
Preguntas relacionadas
Nuevas preguntas
python
Python es un lenguaje de programación multipropósito, de tipificación dinámica y de múltiples paradigmas. Está diseñado para ser rápido de aprender, comprender y usar, y hacer cumplir una sintaxis limpia y uniforme. Tenga en cuenta que Python 2 está oficialmente fuera de soporte a partir del 01-01-2020. Aún así, para preguntas de Python específicas de la versión, agregue la etiqueta [python-2.7] o [python-3.x]. Cuando utilice una variante de Python (por ejemplo, Jython, PyPy) o una biblioteca (por ejemplo, Pandas y NumPy), inclúyala en las etiquetas.