因此,我试图获得一个循环功能来自动识别下一个要添加数字的列表。以下示例代码总结了我要实现的目标。
start = 'patch'
end = 'List'
patch1List = []; patch2List = []; patch3List = []; patch4List = []; patch5List = []; patch6List = []
patch7List = []; patch8List = []; patch9List = []; patch10List = []
for patch in range(10):
num = patch+1
DataPoint = random.randint(1,10)
currentPList = ('%s%d%s' % (start,num,end))
currentPList.append(DataPoint)
我需要循环将数据点附加到10个空列表中的每一个中。
我试图通过设置currentPList
来确定要使用的列表来做到这一点。问题是,我不太确定如何将当前为字符串的currentPList
转换为适当的对象(即空patchList
之一)。我该怎么做?
答案 0 :(得分:4)
您肯定使这复杂化了。只需使用列表列表即可:
>>> import random
>>> num_arrays = 10
>>> array = [ [random.randint(1,10)] for i in range(num_arrays) ]
>>> array
[[2], [1], [10], [6], [9], [2], [2], [5], [8], [4]]
通过这种方法,您可以获得每个单独列表的相同功能,并且具有可扩展性,并且不尝试通过串联字符串引用变量的名称。
答案 1 :(得分:2)
@Charles Drotar的答案是您想要做的,但是由于标题说明了如何将字符串转换为变量名,因此这是实际上可以创建指定为字符串的变量的方法(但在这种情况下请不要这样做) :
s = 'string'
for i in range(1,6):
vars().update({s + str(i): i})
>>> string2
2
>>> string5
5
您在这里所做的就是将变量条目添加到名称空间。在没有对象参数的情况下,vars()
的行为类似于locals()
答案 2 :(得分:1)
我认为 Pythonic 的实现方式是将所有补丁列表存储在一个字典中。这样,您可以通过为每个字典创建唯一的字典键来轻松选择其中一个。还要注意,使用这种方法生成的密钥甚至不需要是有效的Python标识符,而且更改数量非常容易,因为它们都是动态完成的。
这就是我的意思(请注意,我也使用PEP 8 Naming Conventions之后的变量名):
from collections import defaultdict
import random
START, END = 'patch', 'List'
patches = defaultdict(list) # A dictionary whose values default to lists.
for patch_num in range(1, 11):
data_point = random.randint(1, 10)
current_patch_list = ('%s%d%s' % (START, patch_num, END)) # Create key.
patches[current_patch_list].append(data_point)
print(dict(patches))
样本量:
{'patch1List': [5], 'patch2List': [8], 'patch3List': [4], 'patch4List': [9], 'patch5List': [10], 'patch6List': [9], 'patch7List': [5], 'patch8List': [9], 'patch9List': [8], 'patch10List': [7]}