2010-03-08 29 views
37

Çoklu Listeler başlatılıyor Bu korkunç çirkin: tek bir satırda bu değişkenleri bildirmek için bir yolPython -/Çizgi

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

var mı?

+0

Böyle bir şeyi yapmak, özellikle eğer çirkin olduğunu sanmıyorum psData = [] # orada – extraneon

+2

yılında çirkinlik ya da değil, birbirine çok benzer bu isimler bir ile dikkat neler açıklayan bazı comment: psData ve pdata, mAData ve msData ... – Francesco

+1

-1: Bunu en az tuş vuruşu kullanan bir "kod golf" yapısıyla değiştirmeyin. Bu güzel. Herhangi bir şey daha fazla, bu programı sürdürmek isteyen milletleri yönlendirecek ve hayal kırıklığına uğratacaktır. Gerçekten, bundan daha karanlık bir şey muhtemelen buna yeniden yazılacaktır. –

cevap

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

yukarıdaki yaklaşımın olumsuz = solunda isimlerin sayısını saymak gerekir ve boş listelerinin tam olarak aynı sayıda, (örneğin range çağrı veya daha açık aracılığıyla) sağda el tarafı.

ana şey, tüm isimler aynı boş listeye bakın değil kullanımı bir topluluk haline getiren

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

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

gibi ne de

yapın!

+0

Başar, liste değişkenlerini ilklendirin gibi, yanıt için teşekkür ederiz. Test edildi ve çalışıyor! – thenickname

+0

@thenickname, yardım için her zaman mutlu! –

+1

Harika bir cevap, Ben, alist, blist, clist = [] 'nin C stilini yapmaya çalışıyorum ve bu –

12
psData,nsData,msData,ckData,mAData,RData,pData = [],[],[],[],[],[],[] 
+0

@Alex, Şüphesiz benim kötü, dün gece altı saydım LoL – YOU

8

Gereksinimlerinize bağlı olarak, bir liste fabrikasıyla varsayılan bir yöntem kullanmayı düşünebilirsiniz.

my_lists = collections.defaultdict(list) 

ve sonra doğrudan böylece my_lists [ "psData"] ve ekleyebileceğiniz: şey gibi. Bu, ilgili belge sayfasıdır: http://docs.python.org/library/collections.html#collections.defaultdict

+1

Bunun için teşekkürler! Bu python'u yeni başlayanlara faydalı bir kod yazmama izin verir, ama aynı zamanda kodumu geliştirmek için öğrenmeye devam edebildiğim birçok gelişmiş özelliğe de sahiptir. – vorpal

+0

Bu güçlü noktalarından biri ve Guido'nun ve diğer temel katkıda bulunanların dil tasarımına olan vasiyetinin bir kanıtı! – Francesco

-1

Verileri başlatmak/saklamak için bir sınıf kullanabilirsiniz, daha fazla satır alır, ancak daha kolay okunabilir ve nesne yönelimli olabilir.

gibi: Başlangıçta yakınındaki ana yılında Sonra

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

:

data=Data() 
senin döngüler içinde Sonra

veya herhangi bir yerde ana sonrası bildiriminde Sınıfa kullanabilirsiniz.

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

Bu aslında bir dict, aynı zamanda - OP'nin sorusunu çözmüyor, ne de basit, OP açıkça daha az kod istiyordu ve daha az güçlük, bu böyle değil. bununla birlikte, bu sorun için bir çözüm türü, bir şey hak ediyor, ama çok daha iyi yapılabilir, aynı zamanda, bazı garip isimler kullandınız. –

0

Düzenliliklerin, performansın bir sonucu olarak ortaya çıkabileceğini unutmayın. Aralık işlev çağrısı, init işlemini biraz yavaşlatır. Değişkeni pek çok kez yeniden yapılandırmanız gereken bir işleminiz varsa dikkatli olun.

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")