So hängen Sie in Python mehrere Elemente in einer Zeile an

91

Ich habe:

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

Ich wollte die newlist.append()Aussagen in ein paar Aussagen umwandeln.

was auch immer
quelle
Natürlich ist es nicht dasselbe, wenn Sie unterschiedliche Ergebnisse erzielen.
JJJ
Dies ist eine ungültige Syntax.
TerryA
4
Angenommen, Ihre Objekte sind Listen, dann ist Ihr Code kein gültiges Python, wie Sie es []stattdessen verwenden (). Bitte posten Sie echten Arbeitscode.
BrenBarn

Antworten:

224

Nein. Die Methode zum Anhängen einer gesamten Sequenz lautet list.extend().

>>> L = [1, 2]
>>> L.extend((3, 4, 5))
>>> L
[1, 2, 3, 4, 5]
Ignacio Vazquez-Abrams
quelle
'Einfügen' fungiert als 'Anhängen', wird jedoch am Anfang der Liste hinzugefügt. Gibt es eine Funktion zum Hinzufügen mehrerer Werte am Anfang einer Liste?
Spatz
@sparrow: Nein. Stattdessen Slice-Assign.
Ignacio Vazquez-Abrams
Benötigen Sie die zweite Eingabe als Liste oder kann es sich nur um jedes durch Kommas getrennte Element handeln?
Charlie Parker
@CharlieParker: Das Argument zu list.extend()muss iterierbar sein.
Ignacio Vazquez-Abrams
5

Nein.

Zunächst einmal appendist eine Funktion, so dass Sie nicht schreiben können, append[i+1:i+4]weil Sie versuchen, ein Stück von etwas zu bekommen, das keine Sequenz ist. (Sie können auch kein Element davon erhalten: append[i+1]ist aus demselben Grund falsch.) Wenn Sie eine Funktion aufrufen, steht das Argument in Klammern , dh in den runden:() .

Zweitens versuchen Sie, "eine Sequenz zu nehmen und jedes Element am Ende dieser anderen Sequenz in der ursprünglichen Reihenfolge einzufügen". Das ist geschrieben extend. appendist "nimm dieses Ding und setze es am Ende der Liste als einzelnes Element ein , auch wenn es auch eine Liste ist ". (Denken Sie daran, dass eine Liste eine Art Sequenz ist.)

Aber dann müssen Sie sich bewusst sein, dass i+1:i+4es sich um ein spezielles Konstrukt handelt, das nur in eckigen Klammern (um ein Slice aus einer Sequenz zu erhalten) und geschweiften Klammern (um ein dictObjekt zu erstellen ) angezeigt wird . Sie können es nicht an eine Funktion übergeben. Damit kannst du nicht extend. Sie müssen eine Folge dieser Werte erstellen, und der natürliche Weg, dies zu tun, ist mit der rangeFunktion.

Karl Knechtel
quelle
5

Du könntest auch:

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

Benutze das :

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

#Code
L1+L2

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

Mit dem Operator (+) können Sie die mehreren Operatoren zum Anhängen und Erweitern in nur einer Codezeile überspringen. Dies gilt für mehr als zwei Listen von L1 + L2 + L3 + L4 ....... usw.

Viel Spaß beim Lernen ... :)

Idrisi_Kasim
quelle
1
mylist = [1,2,3]

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

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

AUSGABE:

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