2013-08-07 25 views
3

我是一名Python初学者,并且满足了为python脚本动态声明/创建一些列表的要求。我需要这样的东西来创建4个对象列表像depth_1,depth_2,depth_3,depth_4在给予它应该动态地创建lists.Can请你给我提供了解决这个的4.Like在Python中动态声明/创建列表

for (i = 1; i <= depth; i++) 
{ 
    ArrayList depth_i = new ArrayList(); //or as depth_i=[] in python 
} 

这样的输入?

感谢你在期待

回答

5

你可以做你想要使用globals()locals()什么。

>>> g = globals() 
>>> for i in range(1, 5): 
...  g['depth_{0}'.format(i)] = [] 
... 
>>> depth_1 
[] 
>>> depth_2 
[] 
>>> depth_3 
[] 
>>> depth_4 
[] 
>>> depth_5 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
NameError: name 'depth_5' is not defined 

为什么不使用列表清单?

>>> depths = [[] for i in range(4)] 
>>> depths 
[[], [], [], []] 
+0

谢谢..但Iam在使用第一种方法g ['depth_ {}'.format(i)] = []时出现错误 ValueError:格式为零的长度字段名称 – Cheese

+0

@ChithraNair,我更新了代码在Python 2.6上运行。 – falsetru

+0

,同时试图打印depths_1它告诉未定义的变量!是的,我想我可以使用清单列表 – Cheese

4

你不能在Python中实现这一点。推荐的方法是使用一个列表来存储你想要的四个名单:

>>> depth = [[]]*4 
>>> depth 
[[], [], [], []] 

或者使用的技巧,比如globalslocals。但不要这样做。这不是一个很好的选择:

>>> for i in range(4): 
...  globals()['depth_{}'.format(i)] = [] 
>>> depth_1 
[] 
+0

谢谢。但是我在执行这个g ['depth_ {}'.format(i)] = []时得到下面的错误: ValueError:格式为零的长度字段名称 – Cheese

+0

对不起,为什么使用全局变量不是一个好的选择)? – Cheese

+0

它将在全局命名空间中注册变量。有时会导致混乱。 – zhangyangyu

3

我觉得depth_i是有风险的,因此不会使用它。我建议你用下面的办法来代替:

depth = [[]] 

for i in range(4): 
    depth.append([]) 

现在,您可以通过使用depth[1]而不仅仅是打电话depth_1。如果可能的话,你应该从depth[0]开始。

然后代码将是depth = []

+0

它确实有帮助。非常感谢你 – Cheese