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ń.


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]

„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.



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 ... :)


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]

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])
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.