[PYTHON] Beherrsche die Einschlussnotation

Was ist Einschlussnotation?

Notation, die beim Erstellen von Listen und Wörterbüchern mit Python verwendet werden kann. Da Python eine langsame for-Schleife hat, können Sie beim Erstellen von Listen und Wörterbüchern die Einschlussnotation verwenden, um sie viel schneller zu machen.

Basic

Wenn Sie eine Liste erstellen, sieht es so aus.

new_list = [f(myiter) for myiter in origin_list]

Sie können auch ein Wörterbuch erstellen, indem Sie [] durch {} ersetzen.

new_dict = {indexes[myiter]:f(myiter) \
for myiter in origin_list}

Das Grundmuster ist wie folgt.

[(Ausdruck mit Iterator) für(iterater)in (ursprüngliches iterierbares Objekt)]

Verwenden Sie die bedingte Verzweigung mit if

wenn nur

Wenn Sie nur ein if verwenden, fügen Sie ** am Ende ** hinzu.

Extrahieren Sie ungerade Zahlen bis zu 10


odd = [i for i in range(10) if i%2 != 0]
# [1,3,5,7,9]

Zu diesem Zeitpunkt funktioniert if als Filter.

Bei Verwendung von if else

Wenn Sie auch else verwenden, fügen Sie ** vor ** für hinzu.

Seltsam ist"odd", Sogar"even"Gib es zurück


xx = ["even" if i%2==0 else "odd" for i in range(10)]
# ['even', 'odd', 'even', 'odd', 'even', 'odd', 'even', 'odd', 'even', 'odd']

Der Grund, warum dem if ein Präfix vorangestellt werden muss, ist, dass das if zu diesem Zeitpunkt ein Teil des ternären Operators ist, im Gegensatz zum vorherigen if. "gerade" wenn i% 2 == 0 sonst "ungerade" `` `ist ein Ausdruck und wird mit for wiederholt.

~~ Sie können nicht mehrere andere verwenden. ~~ Elif kann nicht verwendet werden, wenn mehrere bedingte Verzweigungen erstellt werden. Dies kann erreicht werden, indem andernfalls mehrere verwendet werden.

Wenn es mehrere Indizes gibt

Muster zum Ausrichten

xx = [i+j for i in i_list for j in j_list]

Verschachteltes Muster

xx = [[i+j for i in range(3)] for j in range(5)]

Wenn Sie numpy-Operationen verwenden möchten, übergeben Sie diese an np.array.

xx = np.array([[i+j for i in range(3)] for j in range(5)])

numpy.array ist ziemlich schlau, so dass es doppelt, dreifach und vierfach richtig formen kann.

Muster mit Reißverschluss

Ordnen Sie mit (0,0), (1,1), (2,2), ...

xx = [i+j for i,j in zip(mylist_i,mylist_j)]

Um nicht in den Sumpf zu stürzen

Sie sind vielleicht so weit gekommen und schon "Uh". Da es in der Listeneinschlussnotation keine Regel für Zeilenumbrüche gibt, wird eine Zeile lang und verschleiert. Wenn es also länger wird, stellen Sie sicher, dass Sie einen korrekten Zeilenumbruch einfügen **.

Wenn Sie im Fall von VSCode \ in die erste Zeile setzen, wird es danach gut formatiert. Eigentlich läuft es mit oder ohne .

#Absoluter Zeilenumbruch bei Verwendung von if
xx = ["even" if i % 2 == 0 else "odd" \
    for i in range(10)]

#Wenn der Ausdruck lang ist, fügen Sie am langen Teil eine Pause ein
zz = [np.sin(xx) + np.random.rand(xx.shape) \
    for xx in list_xx]

Recommended Posts

Beherrsche die Einschlussnotation
Dies und das der Einschlussnotation.
Python-Grundkurs (10 Einschlussnotation)
Beherrschen Sie die umfangreichen Funktionen von IPython
Beherrsche den Typ mit Python [Python 3.9 kompatibel]
Beherrsche das schwache Ref-Modul in Python
[Blender x Python] Lass uns das Material beherrschen !!
Memorandum von Python-Anfängern