我是python的新手,我已经搜索了很多关于这个问题的内容。我知道有一种方法可以将元组转换为列表,但不知何故它对我不起作用。这是我的问题。
说我有:
l_1 = ['a','b','c']
l_2 = ['e','f','g']
l_3 = ['g','h','i']
然后说我有另一个清单:
l_all = ['l_1','l_2','l_3']
如何将它(l_all)转换为
列表[['a','b','c'],['e','f','g'],['g','h','i']]
我使用ast.literal_eval尝试了ast包,但是收到了这个错误:
ValueError:格式错误的节点或字符串:< _ast.Name object at 0x00000172CA3C5278>
我也尝试过使用json包,但仍然没有运气。
我尝试输出ast.literal_eval('l_1')
,但没有工作。
如果有人可以提供帮助,我真的很感激。
非常感谢!
答案 0 :(得分:3)
这听起来像是一个应该在上游修复的问题
ast.literal_eval
评估文字。 eval
只是1)作弊和2)如此危险我根本不会推荐它。
无论如何,您可以使用global& amp;扫描全局然后局部变量。列表理解中的本地词汇:
l_1 = ['a','b','c']
l_2 = ['e','f','g']
l_3 = ['g','h','i']
l_all = ['l_1','l_2','l_3']
l_all = [globals().get(x,locals().get(x)) for x in l_all]
结果:
[['a', 'b', 'c'], ['e', 'f', 'g'], ['g', 'h', 'i']]
globals().get(x,locals().get(x))
是一个快速的&脏代码首先看全球变量&如果找不到,则回退到本地变量。它可能会因您的需求而过于复杂。
答案 1 :(得分:2)
您可以使用字典存储列表名称和每个关联列表:
d = {'l_2': ['e', 'f', 'g'], 'l_3': ['g', 'h', 'i'], 'l_1': ['a', 'b', 'c']}
l_all = ['l_1','l_2','l_3']
final_results = [d[i] for i in l_all]
输出:
[['a', 'b', 'c'], ['e', 'f', 'g'], ['g', 'h', 'i']]
但是,要通过变量名实际访问列表,您必须使用globals
:
l_1 = ['a','b','c']
l_2 = ['e','f','g']
l_3 = ['g','h','i']
l_all = ['l_1','l_2','l_3']
new_l = [globals()[i] for i in l_all]
输出:
[['a', 'b', 'c'], ['e', 'f', 'g'], ['g', 'h', 'i']]
答案 2 :(得分:1)
然后说我有另一个清单:
l_all = ['l_1','l_2','l_3']
让我们假设您不是使用字符串创建它,并直接使用列表变量
然后,您可以获得所需的输出
l_all = [l_1,l_2, l_3]
答案 3 :(得分:1)
您可以这样做:
l_1 = ['a','b','c']
l_2 = ['e','f','g']
l_3 = ['g','h','i']
l_all = ['l_1','l_2','l_3']
print(list(map(lambda x:globals()[x],l_all)))
输出:
[['a', 'b', 'c'], ['e', 'f', 'g'], ['g', 'h', 'i']]
答案 4 :(得分:0)
您可以使用locals()
l_1 = ['a','b','c']
l_2 = ['e','f','g']
l_3 = ['g','h','i']
l_all = ['l_1', 'l_2', 'l_3']
all_local_variables = locals()
l_all_values = [all_local_variables[i] for i in l_all]
并且您应该知道,如果当前范围中没有此类变量,您可以获得KeyError
,因为您可以all_local_variables.get(i)
,如果不存在则返回None
或设置默认值作为all_local_variables.get(i, 'default')
答案 5 :(得分:0)
最简单的方法是在l_all中评估字符串。像这样的东西
>>> l_1 = ['a','b','c']
>>> l_2 = ['e','f','g']
>>> l_3 = ['g','h','i']
>>> l_all = ['l_1','l_2','l_3']
>>> [ eval(x) for x in l_all ]
输出
[['a', 'b', 'c'], ['e', 'f', 'g'], ['g', 'h', 'i']]