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?
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
.
append()
regresar enNone
lugar de la misma lista? ¿Qué principio zen violaría?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.
fuente
list.append
es una función integrada y, por lo tanto, no se puede cambiar. Pero si está dispuesto a usar algo diferenteappend
, 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
fuente
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.
fuente
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.fuente
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.
fuente
Solo necesitas hacer myList.append (40)
Lo agregará a la lista original, no devolverá una nueva lista.
fuente