Python将字符串转换为变量名

3
我知道这可能会被认为是重复的,但目前我还没有找到(或者说理解)我要寻找答案的回复。
我有一个字符串列表,希望将每个字符串转换为一个变量名,然后给它赋值。我明白我可能需要用到字典,但由于我对Python相对较新,而且迄今为止我看到的所有示例都涉及值,而我正在尝试不同的东西。
我想要的是像这样的东西:
list = ['spam', 'eggs', 'ham']

for i in range(len(list)):
    list[i] = rat.readColumn(ratDataset, list[i])

第一个list[i]是变量名,而不是字符串。第二个list[i]是一个字符串(为了上下文,它是我从栅格属性表(rat)中读取的列名)。

本质上,我希望列表中的每个字符串都被设置为变量名。

这样做的想法是,我可以创建一个循环而不必为我想要的每个变量编写一行代码,并与rat列名(即字符串)相匹配。也许有比我建议的更好的方法?


只需使用字典,您应该将数据从变量名称中剥离出来。 - jonrsharpe
你能提供一些帮助,告诉我该怎么做吗? - GeoMonkey
https://docs.python.org/3/tutorial/datastructures.html#dictionaries - jonrsharpe
3个回答

3
请尝试以下操作:
lst = ['spam', 'eggs', 'ham']
d = {}   # empty dictionary
for name in lst:
    d[name] = rat.readColumn(ratDataset, name)

不要使用list作为标识符,因为它是一种类型标识符,您会掩盖其存在。for循环可以直接迭代内部元素——不需要构造索引并将其用于列表。 d ['spam'] 将是您的一个变量
虽然也可以创建真正的变量名称,例如spameggsham,但您可能不会这样做,因为效果是无用的。

亚瑟比原来快了14秒。 - pepr

1
这里是一个简单的字典使用示例:
variables = ['spam', 'eggs', 'ham']
data = {}

datum = 0

for variable in variables:
    data[variable] = datum
    datum+=1

print(data)
print("value : ",data[variables[2]])

它的结果是:


{'eggs': 1, 'ham': 2, 'spam': 0}
value : 2

注意:不要将“list”用作变量名,list是一种类型标识符,您可以使用它将对象转换为列表(如果可能的话list("abc")==['a', 'b', 'c']),并且您现在正在用自己的值列表覆盖它。

0

一种方法是将变量名设置为字符串,并通过format()方法更改部分或全部内容,然后使用该字符串作为变量,可以通过vars()[STRING]实现。

import numpy as np
X1= np.arange(1,10)                                                                                                                                
y1=[i**2 for i in X1]                                                                                                                                
X2= np.arange(-5,5)                                                                                                                                
y2=[i**2 for i in X2]                                                                                                                          
for i in range(1,3): 
    X = 'X{}'.format(i) 
    y = 'y{}'.format(i) 
    print('X_{}'.format(i) , vars()[X])
    print('y_{}'.format(i) , vars()[y])

输出:


X_1 [1 2 3 4 5 6 7 8 9]
y_1 [1, 4, 9, 16, 25, 36, 49, 64, 81]
X_2 [-5 -4 -3 -2 -1  0  1  2  3  4]
y_2 [25, 16, 9, 4, 1, 0, 1, 4, 9, 16]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接