Python – Mehrere Listen/Zeile initialisieren

Lesezeit: 3 Minuten

Das ist furchtbar hässlich:

psData = []
nsData = []
msData = []
ckData = []
mAData = []
RData = []
pData = []

Gibt es eine Möglichkeit, diese Variablen in einer einzigen Zeile zu deklarieren?

  • Ich finde es nicht hässlich, besonders wenn du psData = . machst [] # Ein Kommentar, der erklärt, was da drin ist

    – Extraneon

    8. März ’10 um 16:08

  • Hässlichkeit oder nicht, hüte dich vor diesen Namen, die sich so ähnlich sind: psData und pdata, mAData und msData…

    – Francesco

    8. März ’10 um 16:11

  • -1: Ersetzen Sie dies nicht durch eine “Codegolf”-Konstruktion, die die minimale Anzahl von Tastenanschlägen verwendet. Das ist nett. Alles Knappere wird Leute verwirren und frustrieren, die dieses Programm beibehalten wollen. In der Tat wird alles Unklarere als dies wahrscheinlich umgeschrieben.

    – S.Lott

    8. März ’10 um 19:41

  • Es sollte nicht verwirrend sein, wenn der Coder einen Kommentar hinzufügt, um zu erklären, was die Codezeile tut, wie # Listenvariablen initialisieren

    – CCKx

    20. Januar ’17 um 15:01

Python Mehrere ListenZeile initialisieren
Alex Martelli

alist, blist, clist, dlist, elist = ([] for i in range(5))

Der Nachteil des obigen Ansatzes ist, dass Sie die Anzahl der Namen links von zählen müssen = und haben genau gleich viele leere Listen (zB über die range Anruf, oder expliziter) auf der rechten Seite.

Die Hauptsache ist, nicht benutze sowas wie

alist, blist, clist, dlist, elist = [[]] * 5

Noch

alist = blist = clist = dlist = elist = []

was dazu führen würde, dass sich alle Namen auf die gleich leere Liste!

  • @thenickname, immer gerne behilflich!

    – Alex Martelli

    8. März ’10 um 16:08

  • Tolle Antwort, ich habe versucht, den C-Stil von . zu machen alist, blist, clist = [] und scheiterte, bis ich das gefunden habe

    – Bas Jansen

    9. Apr. ’13 um 16:06

  • Gilt das auch für Wörterbücher?

    – Rom

    21. Okt ’13 um 13:24

  • Ja, das gilt auch für Wörterbücher. Das habe ich gesucht, bis ich auf diese Frage und Antwort gestoßen bin.

    – CCKx

    20. Januar ’17 um 14:55

  • Danke für die Erklärung; Die erste Zeile ist das, was ich gesucht habe.

    – Luke Davis

    2. März ’17 um 20:28

Python Mehrere ListenZeile initialisieren
SIE

psData,nsData,msData,ckData,mAData,RData,pData = [],[],[],[],[],[],[]

Abhängig von Ihren Anforderungen können Sie erwägen, ein defaultdict mit einer Listenfactory zu verwenden. Etwas wie:

my_lists = collections.defaultdict(list)

und dann kannst du direkt an my_lists anhängen[“psData”] und so weiter. Dies ist die entsprechende Dokumentseite: http://docs.python.org/library/collections.html#collections.defaultdict

  • Dank dafür! Ich finde es toll, dass Python mich als Anfänger nützlichen Code schreiben lässt, aber auch so viele erweiterte Funktionen hat, dass ich immer wieder lernen kann, meinen Code zu verbessern.

    – vorpal

    4. Oktober ’17 um 3:13

  • Das ist eine seiner Stärken und ein Beweis für den Einfallsreichtum von Guido und den anderen Hauptbeteiligten am Sprachdesign!

    – Francesco

    4. Oktober ’17 um 3:27


Python Mehrere ListenZeile initialisieren
Benyamin Jafari

Etwas effizienterer Ansatz:

alist, blist, clist, dlist, elist = ([] for _ in xrange(5))

[NOTE]:

  • xrange() ist optimaler als range() in Python2. (Ref)

  • Der i Variable war unbrauchbar, also verwenden _ ist besser. (Ref)

  • xrange() ist nicht definiert in Python3.

Denken Sie daran, dass Ordnung Konsequenzen für die Leistung haben kann. Der Aufruf der Range-Funktion verlangsamt den Init-Prozess etwas. Seien Sie vorsichtig, wenn Sie einen Prozess haben, der die Variable viele Male neu initialisieren muss.

import time
def r_init():
    st=time.time()
    alist, blist, clist, dlist, elist = ([] for i in range(5))
    et=time.time()
    print("{:.15f}".format(et-st))

def p_init():
    st=time.time()
    alist=[];blist=[];clist=[];dlist=[];elist=[]
    et=time.time()
    print("{:.15f}".format(et-st))

for x in range(1,10):
    r_init()
    p_init()
    print("n")

1641964103 653 Python Mehrere ListenZeile initialisieren
Spectre87

Sie können eine Klasse verwenden, um die Daten zu initialisieren/zu speichern, dies würde mehr Zeilen erfordern, könnte aber einfacher zu lesen und objektorientierter sein.

Mögen:

class Data:
    def __init__(self):
        self.var1=[]
        <etc.>
    def zeroize(self):
        self.var1=[]
        <etc.>

Dann in der Hauptsache am Anfang:

data=Data()

Dann können Sie die Klasse in Ihren Schleifen oder überall in der Hauptpost-Deklaration verwenden.

data.var1.append(varN)
if(something):
    data.zeroize()

1641964103 420 Python Mehrere ListenZeile initialisieren
Bryson S.

Etwas in der Art von

alist, blist, clist, dlist, elist = ([],)*5

scheint die eleganteste lösung zu sein.

  • alist.append("oops"); print(blist): ['oops'].

    – Bers

    5. Dezember ’19 um 10:28

.

419400cookie-checkPython – Mehrere Listen/Zeile initialisieren

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy