如何从包含其名称的字符串中选择一个变量?

时间:2019-01-01 08:48:18

标签: python string python-2.7

因此,我试图获得一个循环功能来自动识别下一个要添加数字的列表。以下示例代码总结了我要实现的目标。

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之一)。我该怎么做?

3 个答案:

答案 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]}