Comment ajouter plusieurs éléments sur une ligne en Python

91

J'ai:

count = 0
i = 0
while count < len(mylist):
    if mylist[i + 1] == mylist[i + 13] and mylist[i + 2] == mylist[i + 14]:
        print mylist[i + 1], mylist[i + 2]
    newlist.append(mylist[i + 1])
    newlist.append(mylist[i + 2])
    newlist.append(mylist[i + 7])
    newlist.append(mylist[i + 8])
    newlist.append(mylist[i + 9])
    newlist.append(mylist[i + 10])
    newlist.append(mylist[i + 13])
    newlist.append(mylist[i + 14])
    newlist.append(mylist[i + 19])
    newlist.append(mylist[i + 20])
    newlist.append(mylist[i + 21])
    newlist.append(mylist[i + 22])
    count = count + 1
    i = i + 12

Je voulais faire les newlist.append()déclarations en quelques déclarations.

peu importe
la source
Bien évidemment, ce n'est pas la même chose si vous obtenez des résultats différents.
JJJ
C'est une syntaxe invalide.
TerryA
4
En supposant que vos objets sont censés être des listes, votre code n'est pas Python valide comme vous l'utilisez à la []place de (). Veuillez poster un vrai code de travail.
BrenBarn

Réponses:

225

Non. La méthode pour ajouter une séquence entière est list.extend().

>>> L = [1, 2]
>>> L.extend((3, 4, 5))
>>> L
[1, 2, 3, 4, 5]
Ignacio Vazquez-Abrams
la source
'insert' fonctionne comme 'append' mais s'ajoute au début de la liste. Existe-t-il une fonction pour ajouter plusieurs valeurs au début d'une liste?
sparrow le
@sparrow: Non. Slice-assign à la place.
Ignacio Vazquez-Abrams
avez-vous besoin que la deuxième entrée soit une liste ou peut-il être simplement chaque élément séparé par des virgules?
Charlie Parker
@CharlieParker: l'argument de list.extend()doit être un itérable.
Ignacio Vazquez-Abrams
5

Non.

Tout d'abord, appendc'est une fonction, donc vous ne pouvez pas écrire append[i+1:i+4]parce que vous essayez d'obtenir une tranche d'une chose qui n'est pas une séquence. (Vous ne pouvez pas obtenir un élément de celui - ci, soit: append[i+1]est mauvais pour la même raison.) Lorsque vous appelez une fonction, l'argument va dans parenthèses , à savoir les rondes: ().

Deuxièmement, ce que vous essayez de faire est de "prendre une séquence et de mettre chaque élément à la fin de cette autre séquence, dans l'ordre d'origine". C'est épelé extend. appendest "prenez cette chose, et mettez-la à la fin de la liste, comme un seul élément , même si c'est aussi une liste ". (Rappelez-vous qu'une liste est une sorte de séquence.)

Mais alors, vous devez être conscient qu'il i+1:i+4s'agit d'une construction spéciale qui apparaît uniquement entre crochets (pour obtenir une tranche d'une séquence) et accolades (pour créer un dictobjet). Vous ne pouvez pas le transmettre à une fonction. Donc vous ne pouvez pas extendavec ça. Vous devez créer une séquence de ces valeurs, et la manière naturelle de le faire est d'utiliser la rangefonction.

Karl Knechtel
la source
5

Vous pouvez également:

newlist += mylist[i:i+22]
Kevin Postlewaite
la source
2

Utilisez ceci :

#Inputs
L1 = [1, 2]
L2 = [3,4,5]

#Code
L1+L2

#Output
[1, 2, 3, 4, 5]

En utilisant l'opérateur (+), vous pouvez ignorer les multiples opérateurs d'ajout et d'extension dans une seule ligne de code et cela est valable pour plus de deux listes par L1 + L2 + L3 + L4 ....... etc.

Bon apprentissage...:)

Idrisi_Kasim
la source
1
mylist = [1,2,3]

def multiple_appends(listname, *element):
    listname.extend(element)

multiple_appends(mylist, 4, 5, "string", False)
print(mylist)

PRODUCTION:

[1, 2, 3, 4, 5, 'string', False]
Saoud Rehman
la source