下面的代码似乎遍历了结构,但是当它从travrse_it返回时,传递的结构没有被修改。叶子是不可变的,所以我假设我需要返回它。有人可以在这里指出我做错了什么:
r = ['crossABC', ['A', 'B', 'C'], ['r n w ', 'r n r ', 'r n n ', 'n w w ', 'n w r ', 'n w n', 'n r w ', 'n r r ', 'n r n ', 'n n w ', 'n n r ', 'n n n ']]
rm_space = lambda x: re.sub('\s+', ' ', x)
def traverse_it(it, str_func):
if (isinstance(it, list)):
for item in it:
traverse_it(item, str_func)
elif (isinstance(it, dict)):
for key in it.keys():
traverse_it(it[key], str_func)
elif ( isinstance(it, basestring) ):
return str_func(it)
else:
print "Cant travers unkown item"
traverse_it(r,rm_space)
预期产出:
r = ['crossABC', ['A', 'B', 'C'], ['r n w ', 'r n r ', 'r n n ', 'n w w ', 'n w r ', 'n w n', 'n r w ', 'n r r ', 'n r n ', 'n n w ', 'n n r ', 'n n n ']]
答案 0 :(得分:1)
简单地返回值不会影响项目。您需要返回返回值。代码还需要返回list
,dict
类型。
def traverse_it(it, str_func):
if isinstance(it, list):
for i, item in enumerate(it):
it[i] = traverse_it(item, str_func)
return it
elif isinstance(it, dict):
for key in it:
it[key] = traverse_it(it[key], str_func)
return it
elif isinstance(it, basestring):
return str_func(it)
else:
print "Cant travers unkown item"