Jak dołączyć wiele elementów w jednej linii w Pythonie

91

Mam:

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

Chciałem złożyć newlist.append()oświadczenia w kilka stwierdzeń.

cokolwiek
źródło
Oczywiście to nie to samo, jeśli otrzymujesz różne wyniki.
JJJ
To jest nieprawidłowa składnia.
TerryA
4
Zakładając, że twoje obiekty mają być listami, twój kod nie jest prawidłowym Pythonem, ponieważ używasz []zamiast (). Prześlij prawdziwy działający kod.
BrenBarn

Odpowiedzi:

227

Nie. Metoda dołączania całej sekwencji to list.extend().

>>> L = [1, 2]
>>> L.extend((3, 4, 5))
>>> L
[1, 2, 3, 4, 5]
Ignacio Vazquez-Abrams
źródło
„insert” działa jak „append”, ale dodaje do początku listy. Czy istnieje funkcja dodawania wielu wartości na początku listy?
sparrow
@sparrow: Nie. Zamiast tego należy przypisać plasterki.
Ignacio Vazquez-Abrams
czy potrzebujesz, aby drugie wejście było listą, czy może to być po prostu każdy element oddzielony przecinkami?
Charlie Parker
@CharlieParker: argument list.extend()musi być iterowalny.
Ignacio Vazquez-Abrams
5

Nie.

Po pierwsze, appendjest to funkcja, więc nie możesz pisać, append[i+1:i+4]ponieważ próbujesz uzyskać wycinek rzeczy, która nie jest sekwencją. (Nie można uzyskać element z niego, albo: append[i+1]jest źle z tego samego powodu). Po wywołaniu funkcji, argument idzie w nawiasach , czyli okrągłe z nich: ().

Po drugie, próbujesz zrobić „weź sekwencję i umieść każdy jej element na końcu tej innej sekwencji, w oryginalnej kolejności”. To jest zapisane extend. appendto „weź tę rzecz i umieść ją na końcu listy, jako pojedynczą pozycję , nawet jeśli jest to również lista ”. (Przypomnij sobie, że lista jest rodzajem sekwencji).

Ale wtedy musisz być świadomy, że i+1:i+4jest to specjalna konstrukcja, która pojawia się tylko w nawiasach kwadratowych (aby uzyskać wycinek z sekwencji) i nawiasach (aby utworzyć dictobiekt). Nie możesz przekazać tego funkcji. Więc nie możesz extendz tym. Musisz utworzyć sekwencję tych wartości, a naturalnym sposobem jest użycie rangefunkcji.

Karl Knechtel
źródło
5

Możesz również:

newlist += mylist[i:i+22]
Kevin Postlewaite
źródło
2

Użyj tego :

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

#Code
L1+L2

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

Używając operatora (+), możesz pominąć wiele operatorów dołączania i rozszerzania w jednej linii kodu i jest to ważne dla więcej niż dwóch list przez L1 + L2 + L3 + L4 ....... itd.

Miłej nauki ... :)

Idrisi_Kasim
źródło
1
mylist = [1,2,3]

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

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

WYNIK:

[1, 2, 3, 4, 5, 'string', False]
saoud rehman
źródło
1

używać do pętli. lubię to:

for x in [1,2,7,8,9,10,13,14,19,20,21,22]:
    new_list.append(my_list[i + x])
zakizakibzr
źródło