【发布时间】:2016-11-28 19:46:18
【问题描述】:
我想写入名为 foo 的嵌套列表中的元素,但嵌套深度和索引仅在运行时在名为 indexes 的(非嵌套!)列表变量中知道。
例子:
如果indexes 是[4],我想要foo[4]。
如果indexes 是[4,7],我想要foo[4][7]。
如果indexes 是[4,7,3],我想要foo[4][7][3]。
我能想到的是将命令字符串(最后一个示例中的"foo[4][7][3]")放在一起,然后调用eval。
那将是eval("foo["+']['.join([str(n) for n in indexes])+']')。
这行得通,而且足够短,但我希望有一种更简单、更 Pythonic 的方式。
有谁知道替代品吗?
有没有办法不单独处理空列表?如:
如果indexes 是[],我想要整个foo。
这需要eval 解决方案中的if。
编辑:我需要写入,而不是读取元素。我认为这两个现有答案中的任何一个,以及指定副本的答案,都不能用于写作。为误导而道歉。
【问题讨论】:
-
不要使用
eval,使用ast.literal_eval。 -
result = foo; for index in indexes: result = result[index]; return result?没有evaluating,字面意思或其他方式,并按照你想要的方式对待空的indexes。 -
@jonrsharpe 更好!我写了一个递归方法,但是不值得。
-
@TigerhawkT3:我知道我之前回答过这个问题,但在我的回答列表中找不到!
-
@MartijnPieters - 我可以发誓我在某个地方也有一个,像 Jon 描述的那样有一个简单的循环,但我似乎找不到它。
标签: python python-2.7 list