Python-初始化多个列表/行

Python-初始化多个列表/行,python,list,initialization,Python,List,Initialization,这太难看了: psData = [] nsData = [] msData = [] ckData = [] mAData = [] RData = [] pData = [] 有没有办法在一行上声明这些变量 alist, blist, clist, dlist, elist = ([] for i in range(5)) 上述方法的缺点是,您需要计算=左侧的名称数量,并在右侧有完全相同数量的空列表(例如,通过范围调用,或更明确地说) 一边 最重要的是,不要使用类似 alist, blis

这太难看了:

psData = []
nsData = []
msData = []
ckData = []
mAData = []
RData = []
pData = []
有没有办法在一行上声明这些变量

alist, blist, clist, dlist, elist = ([] for i in range(5))
上述方法的缺点是,您需要计算
=
左侧的名称数量,并在右侧有完全相同数量的空列表(例如,通过
范围
调用,或更明确地说) 一边

最重要的是,不要使用类似

alist, blist, clist, dlist, elist = [[]] * 5
也不是


这将使所有名称都指向相同的空列表

< P>根据您的需要,您可以考虑使用Debug Trutt和列表工厂。
psData,nsData,msData,ckData,mAData,RData,pData = [],[],[],[],[],[],[]
比如:

my_lists = collections.defaultdict(list)
然后你可以直接附加到我的列表[“psData”]等等。
这是相关的文档页面:

您可以使用一个类来初始化/存储数据,它将占用更多的行,但可能更易于阅读,并且更面向对象

比如:

然后,在循环中或主post声明中的任何地方,您都可以使用该类

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

请记住,整洁可能伴随着性能的结果。range函数调用将稍微减慢init进程。如果您有一些流程需要多次重新输入变量,请小心

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

类似于

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

似乎是最优雅的解决方案。

更有效的方法:

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

[注意]:

  • xrange()
    比Python2中的
    range()
    更为优化。()

  • i
    变量不可用,因此使用
    \uu
    更好。()

  • Python3中未定义
    xrange()


我不认为这很难看,尤其是如果你使用psData=[]。#一些注释解释了其中的内容或不内容,请注意这些名称彼此非常相似:psData和pdata,mAData和msData…-1:不要用一些使用最少击键次数的“代码高尔夫”结构来代替它。这很好。任何更简洁的东西都会让那些想要维护这个程序的人感到困惑和沮丧。事实上,任何比这更模糊的东西都有可能被改写成这一行。如果编码者包含一条注释来解释代码行的功能,比如“初始化列表”,这应该不会让人感到困惑variables@thenickname,总是乐于助人!回答得很好,我试着使用C风格的
alist,blist,clist=[]
,但失败了,直到我发现它也适用于字典吗?是的,它也适用于字典。这就是我一直在寻找的,直到我遇到这个问题和答案;第一行是我要找的。这基本上只是一个dict,而且-它不能解决OP的问题,也不是更简单,OP显然想要更少的代码和更少的麻烦,这不是那个。然而,这是问题的另一种解决方案,它确实有价值,但它可以做得更好,而且,您使用了一些奇怪的名称。谢谢!我喜欢python让我作为初学者编写有用的代码,但它也有很多高级功能,我可以不断学习改进代码。这是它的优点之一,也是Guido和其他语言设计核心贡献者独创性的证明!怎样才能比其他东西“更优化”<代码>列表.append(“oops”);打印(blist):
['oops']
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")
alist, blist, clist, dlist, elist = ([],)*5
alist, blist, clist, dlist, elist = ([] for _ in xrange(5))