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))
[注意]:
比Python2中的xrange()
更为优化。()range()
变量不可用,因此使用i
更好。()\uu
- Python3中未定义
xrange()
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))