web-dev-qa-db-fra.com

Python - Initialisation de plusieurs listes/lignes

C'est terriblement moche:

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

Existe-t-il un moyen de déclarer ces variables sur une seule ligne?

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

L'inconvénient de l'approche ci-dessus est que vous devez compter le nombre de noms à gauche de = et avoir exactement le même nombre de listes vides (par exemple via l'appel range ou plus explicitement) à droite. 

La chose principale est, ne pas utiliser quelque chose comme

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

ni

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

ce qui ferait que tous les noms feraient référence à la liste vide same

131
Alex Martelli
psData,nsData,msData,ckData,mAData,RData,pData = [],[],[],[],[],[],[]
20
YOU

En fonction de vos besoins, vous pouvez envisager d'utiliser un defaultdict avec une liste de fabriques . Quelque chose comme:

my_lists = collections.defaultdict(list)

et ensuite vous pouvez directement ajouter à my_lists ["psData"] et ainsi de suite . Voici la page de documentation appropriée: http://docs.python.org/library/collections.html#collections.defaultdict

9
Francesco

Gardez à l'esprit que la propreté peut avoir des conséquences sur les performances. L'appel de la fonction Range ralentira légèrement le processus init. Méfiez-vous si vous avez un processus qui doit réinitialiser la variable plusieurs fois. 

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

Une approche un peu plus efficace:

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

[REMARQUE]:

  • xrange() est un optimiseur par rapport à range() dans Python2( Réf )

  • La variable i étant inutilisable, utiliser _ est préférable. ( Réf )

  • xrange() n'est pas défini dans Python3.

0
Benyamin Jafari