Quiero hacer algo como esto:
myList = [10,20,30]
yourList = myList.append (40)
Desafortunadamente, list append no devuelve la lista modificada.
Entonces, ¿cómo puedo permitir append
devolver la nueva lista?
Respuestas:
En su lugar, no use anexar sino concatenación:
yourList = myList + [40]
Esto devuelve una nueva lista; myList
no se verá afectado. Si necesita haber myList
afectado también , use de .append()
todos modos, luego asigne por yourList
separado de (una copia de) myList
.
list.append
es un comando, no una consulta.
En Python 3, puede crear una nueva lista desempaquetando la anterior y agregando un nuevo elemento:
a = [1,2,3]
b = [*a,4] # b = [1,2,3,4]
Cuando tu lo hagas:
myList + [40]
De hecho, tienes 3 listas.
list.append
es una función integrada y, por lo tanto, no se puede cambiar. Pero si está dispuesto a usar algo diferente append
, puede intentar +
:
In [106]: myList = [10,20,30]
In [107]: yourList = myList + [40]
In [108]: print myList
[10, 20, 30]
In [109]: print yourList
[10, 20, 30, 40]
Por supuesto, la desventaja de esto es que se crea una nueva lista que lleva mucho más tiempo que append
Espero que esto ayude
Puede crear una subclase del tipo de lista incorporado y redefinir el método 'agregar'. O incluso mejor, cree uno nuevo que hará lo que usted quiere que haga. A continuación se muestra el código para un método de 'agregar' redefinido.
#!/usr/bin/env python
class MyList(list):
def append(self, element):
return MyList(self + [element])
def main():
l = MyList()
l1 = l.append(1)
l2 = l1.append(2)
l3 = l2.append(3)
print "Original list: %s, type %s" % (l, l.__class__.__name__)
print "List 1: %s, type %s" % (l1, l1.__class__.__name__)
print "List 2: %s, type %s" % (l2, l2.__class__.__name__)
print "List 3: %s, type %s" % (l3, l3.__class__.__name__)
if __name__ == '__main__':
main()
Espero que ayude.
Intente usar itertools.chain(myList, [40])
. Eso devolverá un generador como una secuencia, en lugar de asignar una nueva lista. Básicamente, eso devuelve todos los elementos del primer iterable hasta que se agota, luego pasa al siguiente iterable, hasta que se agotan todos los iterables.
Solo para ampliar la respuesta de Storstamp
Solo necesitas hacer myList.append (40)
Lo agregará a la lista original, ahora puede devolver la variable que contiene la lista original.
Si está trabajando con listas muy grandes, este es el camino a seguir.
append()
regresar enNone
lugar de la misma lista? ¿Qué principio zen violaría?