Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何从任意结构的所有叶节点中删除额外空间_Python_List_Python 2.7 - Fatal编程技术网

Python 如何从任意结构的所有叶节点中删除额外空间

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

下面的代码似乎很好地遍历了结构,但当它从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    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"