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

Python 如何从包含变量名称的字符串中选择变量?,python,string,python-2.7,Python,String,Python 2.7,因此,我试图获得一个循环函数来自动识别下一个要附加数字的列表。下面的示例代码总结了我试图实现的目标 start = 'patch' end = 'List' patch1List = []; patch2List = []; patch3List = []; patch4List = []; patch5List = []; patch6List = [] patch7List = []; patch8List = []; patch9List = []; patch10List = []

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

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
转换为正确的对象(即空的
修补列表之一)。我该怎么做呢?

你肯定把这件事搞得太复杂了。只需使用列表:

>>> 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]]

通过这种方式,您可以获得每个单独列表的相同功能,并使其具有可扩展性,而不是试图通过串联字符串引用变量的名称。

@Charles Drotar的答案是您想要做的,但由于标题说明了如何将字符串转换为变量名称,以下是如何实际创建指定为字符串的变量(但在您的环境中不要这样做):

这里要做的是将变量条目添加到名称空间中。在没有对象参数的情况下,
vars()
的作用类似于
locals()

我认为Pythonic的方法是将所有补丁列表存储在一个字典中。通过这种方式,您可以通过为每个字典创建一个唯一的字典键来轻松选择其中一个。还请注意,使用这种方法生成的键甚至不需要是有效的Python标识符,而且很容易更改有多少,因为它们都是动态完成的

以下是我的意思(注意,我还使用了以下变量名):

样本输出:


{'patch1List':[5],'patch2List':[8],'patch3List':[4],'patch4List':[9],'patch5List':[10],'patch6List':[9],'patch7List':[9],'patch9List':[8],'patch10List':[7]}

标题有误导性。字符串是对象。您要查找的术语是
变量名
patch1List
patch2List
patch3List
。。。看起来你想使用一个列表而不是10个单变量。嗨,克劳斯,如果代码看起来有点欺骗,很抱歉。这是我试图在更大范围内完成的简化代码。基本上,在每个补丁列表中,它们都有数百个数据点,每个列表由不同的数据点组成。因此,我把它布置成这样。你仍然需要使用一个列表。只要有一个包含10个子列表的列表,而不仅仅是
array=[[random.randint(1,10)]对于范围内的i(num\u arrays)]
对于一个单行程序?Duh@Jean Françoisfar你完全正确,我只是忽略了这一点:/。我将根据您的建议更新答案。值得注意的是,不应修改
locals
的python文档。
s = 'string'
for i in range(1,6):
    vars().update({s + str(i): i})

>>> string2
2
>>> string5
5
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))