嗨所以我有一个像嵌套列表一样的树,它正在动态扩展。目前我一直在使用eval()和exec()来遍历。有一个更好的方法吗?我觉得我不应该像现在这样做。
我的代码:
tree = ["Outer", ["Inner", ["MoreIn", ["InAgain", [] ] ] ] ]
depth = "tree[-1][-1]"
def addToTree(code):
if eval(depth) != []:
exec(depth+"[-1]")
exec(depth+"="code)
它有效,但这感觉真的很笨拙。有没有办法做到这个更清洁?
输入:
code = ["AnotherOne", [ ]]
输出:
tree = ["Outer", ["Inner", ["MoreIn", ["InAgain", ["AnotherOne", []] ] ] ] ]
depth = "tree[-1][-1][-1][-1][-1][-1]" #or whatever is the next empty []
答案 0 :(得分:1)
我假设你一般都在询问如何使用大量复杂的内部循环数组。我要做的是使用递归函数。这只是打印出数组中的所有元素,但稍加适应,你可以用它做很多事情。
arr = [[3,2],2,[[5,9],3,4]]
def recursiveLookThrough(arr):
for element in arr:
if (isinstance(element,list)):
recursiveLookThrough(element)
else:
print(element)
recursiveLookThrough(arr)
答案 1 :(得分:1)
如果您使用的是exec,那么您几乎肯定会做错了。
递归可能是你想做的最好的方式:
def add(tree, string):
head, body = tree
if body:
add(body, string)
else:
body[0:2] = string, []
add(tree, "Wow")
print(tree)
答案 2 :(得分:0)
这是一种避免再次发生的方法:
import itertools
def nest(flat):
out = []
for l in reversed(flat):
out = [l, out]
return out
def nest_another(nested, next_):
last = nested
for depth in itertools.count(0):
if last[-1] == []:
break
last = last[-1]
last[-1] = [next_, []]
return depth, last[-1], nested
items = ["item{}".format(i) for i in range(4)]
nested = nest(items)
print(nested)
depth, last, nested = nest_another(nested, 'another')
print(depth, last, nested)
last[-1] = ['yet_another', []]
print(nested)
打印:
# ['item0', ['item1', ['item2', ['item3', []]]]]
# 3 ['another', []] ['item0', ['item1', ['item2', ['item3', ['another', []]]]]]
# ['item0', ['item1', ['item2', ['item3', ['another', ['yet_another', []]]]]]]