Das ist schrecklich hässlich:
psData = []
nsData = []
msData = []
ckData = []
mAData = []
RData = []
pData = []
Gibt es eine Möglichkeit, diese Variablen in einer einzelnen Zeile zu deklarieren?
python
list
initialization
Der Nickname
quelle
quelle
Antworten:
alist, blist, clist, dlist, elist = ([] for i in range(5))
Der Nachteil des obigen Ansatzes ist, dass Sie die Anzahl der Namen links von
=
und genau die gleiche Anzahl leerer Listen (z. B. über denrange
Anruf oder expliziter) auf der rechten Seite zählen müssen.Die Hauptsache ist, verwenden Sie nicht so etwas
alist, blist, clist, dlist, elist = [[]] * 5
Noch
was dazu führen würde, dass sich alle Namen auf dieselbe leere Liste beziehen !
quelle
alist, blist, clist = []
und bin gescheitert, bis ich das gefunden habequelle
Abhängig von Ihren Anforderungen können Sie ein Standarddiktat mit einer Listenfactory verwenden. Etwas wie:
und dann können Sie direkt an my_lists ["psData"] und so weiter anhängen. Dies ist die relevante Dokumentseite: http://docs.python.org/library/collections.html#collections.defaultdict
quelle
Ein bisschen effizienterer Ansatz:
alist, blist, clist, dlist, elist = ([] for _ in xrange(5))
[ HINWEIS ]:
xrange()
ist optimaler alsrange()
in Python2 . ( Ref )Die
i
Variable war unbrauchbar, daher ist die Verwendung_
besser. ( Ref )xrange()
ist in Python3 nicht definiert .quelle
Bedenken Sie jedoch, dass Ordnung mit den Folgen der Leistung verbunden sein kann. Der Bereichsfunktionsaufruf verlangsamt den Init-Prozess geringfügig. Seien Sie vorsichtig, wenn Sie einen Prozess haben, der die Variable viele Male neu starten 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")
quelle
Sie können eine Klasse verwenden, um die Daten zu initialisieren / zu speichern. Dies würde mehr Zeilen erfordern, könnte jedoch einfacher zu lesen und objektorientierter sein.
Mögen:
class Data: def __init__(self): self.var1=[] <etc.> def zeroize(self): self.var1=[] <etc.>
Dann hauptsächlich am Anfang:
Dann können Sie in Ihren Schleifen oder irgendwo in der Hauptpostdeklaration die Klasse verwenden.
data.var1.append(varN) if(something): data.zeroize()
quelle
Etwas in der Art von
alist, blist, clist, dlist, elist = ([],)*5
scheint die eleganteste Lösung zu sein.
quelle
alist.append("oops"); print(blist)
:['oops']
.