使用字符串python 3标识对象

使用字符串python 3标识对象,python,Python,我在几个案例中遇到了一个问题,还没有找到一个优雅的解决方案。我希望能够使用名称作为字符串来选择任何类型的对象。下面的示例显示,我希望通过遍历三个预定义列表名称的最后一个字符来访问它们,在本例中执行一些函数,提取列表的第二个元素并将其附加到新列表中 my_list_1 = [1,2,3] my_list_2 = [4,5,6] my_list_3 = [7,8,9] my_result = [] for i in range (1,4): my_str = 'my_list_'+str

我在几个案例中遇到了一个问题,还没有找到一个优雅的解决方案。我希望能够使用名称作为字符串来选择任何类型的对象。下面的示例显示,我希望通过遍历三个预定义列表名称的最后一个字符来访问它们,在本例中执行一些函数,提取列表的第二个元素并将其附加到新列表中

my_list_1 = [1,2,3]
my_list_2 = [4,5,6]
my_list_3 = [7,8,9]
my_result = []

for i in range (1,4):
    my_str = 'my_list_'+str (i)
    my_object = object(my_str)
    x = my_object[1]
    my_result.append(x)

print my_result
这段代码当然不起作用,因为行my_object=objectmy_str无法找到将列表名称用作字符串来标识列表的方法

有没有人能克服类似的问题


谢谢

只需使用eval而不是object

eval方法解析传递给该方法的表达式,并在程序中运行python表达式代码

简单地说,eval方法运行python代码,该代码在程序中作为参数传递

eval的语法是:

外泄,全局=无,局部=无


只需使用eval而不是object

eval方法解析传递给该方法的表达式,并在程序中运行python表达式代码

简单地说,eval方法运行python代码,该代码在程序中作为参数传递

eval的语法是:

外泄,全局=无,局部=无

您可以使用内置的局部变量访问当前的局部符号表,该表以dict形式返回。因此:

my_list_1 = [1,2,3]
my_list_2 = [4,5,6]
my_list_3 = [7,8,9]
my_result = []

L = locals()
for i in range (1,4):
    my_str = 'my_list_' + str(i)
    my_result.append(L[my_str][1])

print my_result
您可以使用内置的局部变量访问当前的局部符号表,该表以dict形式返回。因此:

my_list_1 = [1,2,3]
my_list_2 = [4,5,6]
my_list_3 = [7,8,9]
my_result = []

L = locals()
for i in range (1,4):
    my_str = 'my_list_' + str(i)
    my_result.append(L[my_str][1])

print my_result

使用eval函数将其视为已定义的变量:

for i in range (1,4):
    my_str = eval('my_list_' + str(i))    # Here
    my_object = object(my_str)
    x = my_object[1]
    my_result.append(x)

print my_result

使用eval函数将其视为已定义的变量:

for i in range (1,4):
    my_str = eval('my_list_' + str(i))    # Here
    my_object = object(my_str)
    x = my_object[1]
    my_result.append(x)

print my_result

可以使用全局和局部方法返回的值:


可以使用全局和局部方法返回的值:


附加的代码不是正确的Python3代码。请编辑标题。这是否回答了您的问题?你让事情变得比实际情况更复杂。只需迭代列表而不是创建它们的名称:对于my_list1、my_list2、my_list3中的my_对象:。或者更好的方法是,从一开始就创建:list=[[1,2,3],[4,5,6],[7,8,9]],然后迭代。如果你到了需要做你想做的事情的地步,这是一个糟糕设计的标志不确定你的意思,Chulin,我只使用Python 3附加代码不是正确的Python 3代码。请编辑标题。这是否回答了您的问题?你让事情变得比实际情况更复杂。只需迭代列表而不是创建它们的名称:对于my_list1、my_list2、my_list3中的my_对象:。或者更好的方法是,从一开始就创建:list=[[1,2,3],[4,5,6],[7,8,9]],然后迭代。如果你需要做你想做的事情,这是一个糟糕设计的标志不知道你的意思Chuchlin,我只使用Python 3 Hanks Susmit,这也是一个非常简单和优雅的解决方案。谢谢Susmit,这也是一个非常简单和优雅的解决方案。谢谢Pall,这是最有用的谢谢Pall,这是最有用的谢谢John,这是完美的作品,正是我所追求的。我很感谢你的帮助谢谢约翰,这很好用,这正是我想要的。我感谢你的帮助