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?
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?
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
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
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")
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()
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
.
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