Beachten Sie, dass die Listeneinschlussnotation von Python immer verwirrend ist

Einführung

Ich benutze Python bei der Arbeit "Ah, der Prozess der Erstellung einer Liste hier. Wenn Sie die Notation zur Aufnahme von Listen verwenden, können Sie sie präzise schreiben." Ich kann denken. Es gibt jedoch überraschend wenige Situationen, in denen ich eine Listeneinschlussnotation schreiben möchte. Als ich mich entschied, sie zu schreiben, "Oh, wie schreibst du die Listeneinschlussnotation? Nun, ich habe keine Zeit und schleife wie gewohnt?" Es ist eine Schande, die Bedeutung des Memorandums für mich einzuschließen.

Was ist Listeneinschlussnotation?

Was haben Sie gedacht, als Sie dieses Wort zum ersten Mal hörten? Voller Noten. .. .. Um es ganz einfach auszudrücken, ist die Notation der Listeneinbeziehung ** So erstellen Sie Listendaten in einer Zeile ** ist.

Es kann jedoch nicht alles in einer Zeile geschrieben werden, und der Prozess des Erstellens einer Liste in einer Schleife kann in einer Zeile geschrieben werden (obwohl es einige Missverständnisse gibt). Ich selbst dachte: "Der Code, den ich bei der Arbeit schreibe, ist kompliziert!", Aber er kann unerwartet verwendet werden.

Wie schreibt man

Normale Schleife (dies ist keine Notation zur Aufnahme von Listen)

data = []
for i in range(10):
    data.append(i)

print(data)
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Listeneinschlussnotation

print([i for i in range(10)])
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Kommentar

Das Ergebnis der Listeneinschlussnotation ist das gleiche wie das einer normalen Schleife. Die Notation zur Aufnahme von Listen erfordert jedoch weniger Beschreibung. Und der Code ist präzise und leicht zu lesen. (Es ist schwer zu lesen, wenn man sich nicht daran gewöhnt.)

Werfen wir einen Blick auf den in der Liste enthaltenen Code.

[...] Wie Sie wissen, wird dadurch eine Liste erstellt, sodass in regulären Schleifen keine "data = []" erforderlich ist.

for i in range(10) Dies gilt auch für reguläre Schleifen und Listeneinschlüsse. Für die Listeneinschlussnotation ist jedoch : nicht erforderlich.

i for i in range(10) Das erste angezeigte "i" enthält den Wert von "i" (das zweite "i"), das in der Schleife abgerufen wird. Der zuerst angezeigte Wert von "i" wird für jede Schleife neu geschrieben. Das "i" wird der Liste für die Anzahl der Schleifen hinzugefügt.

Etwas konkreter

Ich denke, es ist einfacher zu verstehen, wenn es etwas spezifischer ist, also werde ich es im nächsten Fall erklären.

Fall 1

Wenn Sie die Daten in der Liste verarbeiten möchten. Zum Beispiel, wenn Sie jedem Daten in der Liste "[" aa "," b "," ccc "]" @ "hinzufügen möchten.

items = ['aa', 'b', 'ccc']
print([item + '@' for item in items])
# ['aa@', 'b@', 'ccc@']

Ich erstelle eine weitere Liste, indem ich den Daten in den Elementen "@" hinzufüge. Aus den Listendaten wurden weitere ** Listendaten in einer Zeile ** erstellt.

Fall 2

Wenn Sie ein weiteres Zeichen in der Mitte einer Zeichenfolge gemäß einer festen Regel wie der Datenverarbeitung hinzufügen möchten. Zum Beispiel, wenn Sie für jedes Zeichen - zu den Daten abcdefgh hinzufügen möchten.

items = 'abcdefgh'
print('-'.join([item for item in items]))
# a-b-c-d-e-f-g-h

Hier werden ** Listendaten aus einer Zeichenfolge in einer Zeile erstellt. ** ** ** Die Daten in dieser Liste werden mit "-" verknüpft, um sie an eine Zeichenfolge zurückzugeben.

[Zusatz] Ich habe einen Kommentar erhalten, daher werde ich ihn hinzufügen. Dies war ohne Verwendung der Listeneinschlussnotation möglich. Sie müssen es nicht verschwenden.

items = 'abcdefgh'
print('-'.join(items))
# a-b-c-d-e-f-g-h

Übrigens, wenn Sie alle zwei Zeichen - hinzufügen möchten.

items = 'abcdefgh'
print('-'.join([items[i*2: i*2+2] for i in range(int(len(items)/2))]))
# ab-cd-ef-gh

Es fühlt sich ein wenig überladen an, also ist es so?

items = 'abcdefgh'
loop_count = int(len(items)/2)
print('-'.join([items[i*2: i*2+2] for i in range(loop_count)]))
# ab-cd-ef-gh

[Zusatz] Ich habe auch einen Kommentar erhalten, also werde ich ihn hinzufügen. In dem obigen Fall wird der Zähler mit der Bezeichnung "i" verwendet, so dass ein Zugriff außerhalb des Bereichs auftreten kann. Es ist ein Schreibstil, der es vermeidet.

items = 'abcdefgh'
print('-'.join(ch1+ch2 for ch1, ch2 in zip(items[::2], items[1::2])))
# ab-cd-ef-gh

Ich habe festgestellt, dass das letzte Zeichen nicht ausgegeben wird, wenn die Anzahl der Zeichen ungerade ist, selbst wenn der Zähler verwendet wird oder nicht. Ich würde einen Zähler benutzen, aber ich konnte es vermeiden.

import math
items = 'abcdefghi'
loop_count = math.ceil(len(items) / 2)
print('-'.join([items[i*2: i*2+2] for i in range(loop_count)]))
# ab-cd-ef-gh-i

Schließlich

In Fall 1 werden die Daten in der Liste verarbeitet, um eine weitere Liste zu erstellen. Fall 2 ist ein Beispiel für die Verarbeitung einer Zeichenfolge, um eine Liste zu erstellen.

Beide Fälle können mit Schleifen erreicht werden, Listeneinschlüsse machen Ihren Code einfach und präzise.

Recommended Posts

Beachten Sie, dass die Listeneinschlussnotation von Python immer verwirrend ist
Python-Listeneinschlussnotation, die leicht zu vergessen ist
Python-Listeneinschlussnotation und Generator
Beachten Sie, dass es Python 3 unterstützt
Python Hinweis: Stellen Sie fest, ob das Befehlszeilenargument in der Liste enthalten ist
Hinweis: Python
10 Python-Fehler, die Anfängern häufig sind
Python-Notiz
[Python] -Liste
[Hinweis] Begriffe, die schwer zu merken sind
[Python] Lösung für das Problem, dass Elemente beim Kopieren einer Liste verknüpft werden
Über die Tatsache, dass die Notation der Listeneinbeziehung in PyPy 7.3.1 nicht mehr langsam ist
Liste der Links, die Anfänger des maschinellen Lernens lernen
Hinweis: Python-Dekorator
Python-Grundlagen: Liste
Python-Programmierhinweis
[Python] Lernnotiz 1
Python lernen note_004
Python lernen note_003
Python> Verständnis / Inklusive Notation> Listenverständnis
[Hinweis] openCV + Python
Hinweis: Listeneinschlussnotation
Python-Anfängernotiz
Python-Listenmanipulation
Mayungos Python-Lernhinweis: Liste der Geschichten und Links
Implementierte List und Bool in Python und SQLite3 (persönliche Notiz)
Beachten Sie, dass das Schreiben mit Ruby so ist wie das Schreiben mit Python
Beachten Sie beim Initialisieren einer Liste in Python
Python3-Einschlussnotation (Liste, Wörterbuch), die ich irgendwo gesehen habe