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?
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?
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 den range
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
alist = blist = clist = dlist = elist = []
was dazu führen würde, dass sich alle Namen auf dieselbe leere Liste beziehen !
alist, blist, clist = []
und bin gescheitert, bis ich das gefunden habe
Abhängig von Ihren Anforderungen können Sie ein Standarddiktat mit einer Listenfactory verwenden. Etwas wie:
my_lists = collections.defaultdict(list)
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
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")
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:
data=Data()
Dann können Sie in Ihren Schleifen oder irgendwo in der Hauptpostdeklaration die Klasse verwenden.
data.var1.append(varN)
if(something):
data.zeroize()