Je veux faire quelque chose comme ça:
myList = [10,20,30]
yourList = myList.append (40)
Malheureusement, list append ne renvoie pas la liste modifiée.
Alors, comment puis-je autoriser append
à renvoyer la nouvelle liste?
N'utilisez pas append mais plutôt la concaténation:
yourList = myList + [40]
Ceci retourne un nouveau liste; myList
ne sera pas affecté. Si vous devez affecter myList
de même soit utiliser .append()
de toute façon, affectez yourList
séparément de (copie de) myList
.
En python 3, vous pouvez créer une nouvelle liste en décompressant l'ancienne et en ajoutant un nouvel élément:
a = [1,2,3]
b = [*a,4] // b = [1,2,3,4]
quand tu fais:
myList + [40]
Vous avez en fait 3 listes.
list.append
est intégré et ne peut donc pas être modifié. Mais si vous êtes prêt à utiliser autre chose que append
, vous pouvez essayer +
:
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]
Bien sûr, l’inconvénient est qu’une nouvelle liste est créée, ce qui prend beaucoup plus de temps que append
J'espère que cela t'aides
Vous pouvez sous-classer le type de liste intégré et redéfinir la méthode 'append'. Ou mieux encore, créez-en un nouveau qui fera ce que vous voulez. Vous trouverez ci-dessous le code d'une méthode 'append' redéfinie.
#!/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 __== '__main__':
main()
J'espère que cela pourra aider.
Juste pour développer la réponse de Storstamp
Il vous suffit de faire MyList.append (40)
Il va l'ajouter à la liste d'origine, vous pouvez maintenant renvoyer la variable contenant la liste d'origine.
Si vous travaillez avec de très grandes listes, c'est la voie à suivre.
Essayez d'utiliser itertools.chain(myList, [40])
. Cela retournera un générateur sous forme de séquence, plutôt que d'allouer une nouvelle liste. Essentiellement, tous les éléments de la première itérative sont renvoyés jusqu'à épuisement, puis sont passés à la suivante, jusqu'à ce que tous les itérables soient épuisés.