Python - 初始化多个列表/行

时间:2010-03-08 16:03:11

标签: python list initialization

这非常难看:

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

有没有办法在一行上声明这些变量?

6 个答案:

答案 0 :(得分:140)

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

上述方法的缺点是,您需要计算=左侧的名称数量,并且具有完全相同数量的空列表(例如,通过range调用,或更明确地)在右边 侧。

主要是,使用类似

的内容
alist, blist, clist, dlist, elist = [[]] * 5

,也不

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

这将使所有名称引用相同空列表!

答案 1 :(得分:21)

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

答案 2 :(得分:9)

根据您的需要,您可以考虑将defaultdict与list factory一起使用。 类似的东西:

my_lists = collections.defaultdict(list)

然后你可以直接附加到my_lists [“psData”]等等。 这是相关的文档页面:http://docs.python.org/library/collections.html#collections.defaultdict

答案 3 :(得分:0)

请记住,整洁可能伴随着表现的后果。范围函数调用将略微降低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")

答案 4 :(得分:0)

更有效的方法:

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

[注意]:

  • xrange() Python2 中的range()优化。 Ref

  • i变量不可用,因此使用_更好。 Ref

  • xrange()未在 Python3 中定义。

答案 5 :(得分:-1)

您可以使用类来初始化/存储数据,它可能需要更多行,但可以更容易阅读,更面向对象。

像:

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

然后在主要附近开始:

data=Data()

然后在你的循环中或主帖子声明中的任何地方你可以使用该类。

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