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?
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
psData,nsData,msData,ckData,mAData,RData,pData = [],[],[],[],[],[],[]
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
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")