Python 如何从任意结构的所有叶节点中删除额外空间
下面的代码似乎很好地遍历了结构,但当它从travrse_返回时,传递的结构没有被修改。叶子是不可变的,所以我想我需要返回它。有人能指出我做错了什么吗Python 如何从任意结构的所有叶节点中删除额外空间,python,list,python-2.7,Python,List,Python 2.7,下面的代码似乎很好地遍历了结构,但当它从travrse_返回时,传递的结构没有被修改。叶子是不可变的,所以我想我需要返回它。有人能指出我做错了什么吗 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
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 ']]
简单地返回值不会影响项目。您需要重新分配返回值。代码还需要返回
列表
,目录
类型
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"