Python 字符串未被识别为列表名称
我有一份名单,上面有一个名字:Python 字符串未被识别为列表名称,python,list,Python,List,我有一份名单,上面有一个名字: list_123_456 = [1,2,3] 然后,我使用文件名的某些部分重新创建此列表的名称: name = 'list_{0}_{1}' .format(filename[0:3],filename[6:9]) 这在某种程度上是有效的,“name”现在等于我想要的“list_123_456”。但代码将其视为字符串,而不是我在开始时定义的列表 例如,如果我尝试: len(name) 我得到的答案是“12”(名字中的字母),而不是我想要的“3” 任何帮助都会
list_123_456 = [1,2,3]
然后,我使用文件名的某些部分重新创建此列表的名称:
name = 'list_{0}_{1}' .format(filename[0:3],filename[6:9])
这在某种程度上是有效的,“name”现在等于我想要的“list_123_456”。但代码将其视为字符串,而不是我在开始时定义的列表
例如,如果我尝试:
len(name)
我得到的答案是“12”(名字中的字母),而不是我想要的“3”
任何帮助都会很好,谢谢。您可以使用字典按姓名获取您的列表:
>>> list_123_456 = [1,2,3]
>>> locals()['list_123_456']
[1, 2, 3]
但这不是一个好的做法。取而代之的是,考虑用实际的列表映射列表名称来制作字典:
>>> data = {'list_123_456': list_123_456}
>>> data['list_123_456']
[1, 2, 3]
您可以使用字典按名称获取列表:
>>> list_123_456 = [1,2,3]
>>> locals()['list_123_456']
[1, 2, 3]
但这不是一个好的做法。取而代之的是,考虑用实际的列表映射列表名称来制作字典:
>>> data = {'list_123_456': list_123_456}
>>> data['list_123_456']
[1, 2, 3]
但代码将其视为字符串,而不是我在开始时定义的列表
那是因为它是一个字符串。字符串不能与变量互换(通常称为字符串,尽管“名称”也是一个好术语)
通常,如果要使用计算名称(即字符串)查找一段数据,应将其存储在dict
:
byname = {'list_123_456':[1,2,3]}
byname[name] #=> [1,2,3]
但代码将其视为字符串,而不是我在开始时定义的列表
那是因为它是一个字符串。字符串不能与变量互换(通常称为字符串,尽管“名称”也是一个好术语)
通常,如果要使用计算名称(即字符串)查找一段数据,应将其存储在dict
:
byname = {'list_123_456':[1,2,3]}
byname[name] #=> [1,2,3]
你想做的几乎总是一个坏主意。如果您只是创建一个字典,而不是一堆单独的变量,那么这很简单:
lists = {}
lists[('123', '456')] = [1, 2, 3]
# ...
现在,不是这样:
name = 'list_{0}_{1}' .format(filename[0:3],filename[6:9])
…您可以这样做:
name = lists[(filename[0:3], filename[6:9])]
当然,您可以将字典的键从'list\u 123\u 456'
中调出,而不是('123','456')
,或者使用两级嵌套dict,这样您就可以编写列表[filename[0:3]][filename[6:9]
…任何您认为可读性最好的内容
如果你真的真的想这样做,如果你知道要计算它的范围,你可以查找变量名来获取它的值,因为
globals()。因此:
name_name = 'list_{0}_{1}' .format(filename[0:3],filename[6:9])
name = globals()[name_name]
如果出现最坏的情况,您甚至可以eval(name\u name)
。但这是一个更糟糕的想法
有关详细信息,请参阅。您试图做的几乎总是一个坏主意。如果您只是创建一个字典,而不是一堆单独的变量,那么这很简单:
lists = {}
lists[('123', '456')] = [1, 2, 3]
# ...
现在,不是这样:
name = 'list_{0}_{1}' .format(filename[0:3],filename[6:9])
…您可以这样做:
name = lists[(filename[0:3], filename[6:9])]
当然,您可以将字典的键从'list\u 123\u 456'
中调出,而不是('123','456')
,或者使用两级嵌套dict,这样您就可以编写列表[filename[0:3]][filename[6:9]
…任何您认为可读性最好的内容
如果你真的真的想这样做,如果你知道要计算它的范围,你可以查找变量名来获取它的值,因为globals()。因此:
name_name = 'list_{0}_{1}' .format(filename[0:3],filename[6:9])
name = globals()[name_name]
如果出现最坏的情况,您甚至可以eval(name\u name)
。但这是一个更糟糕的想法
有关详细信息,请参阅。这是因为name
是一个字符串。您可能希望获取与该变量名关联的对象,可能是使用eval
,这是不推荐的。上次我查看时发现了11个独立的DUP,其中每个DUP都链接到其他几个DUP……这是因为name
是一个字符串。您可能希望获取与该变量名关联的对象,可能是使用eval
,这是不推荐的。我上次查看时发现了11个独立的DUP,其中每一个都链接到其他几个…