2

我正在尝试从作为列表列表列表的输入中删除所有空格...我不知道如何处理“其他:”

def removespace(lst):
   if type(lst) is str:
      return lst.replace(" ","")
   else:
      ?????

例子:

lst = [ apple, pie ,    [sth, [banana     , asd, [    sdfdsf, [fgg]]]]]

输出应该是:

lst2 = [apple,pie,[sth,[banana,asd,[sdfdsf,[fgg]]]]] 

如果 lst 包含整数或浮点数怎么办?我收到了整数错误。

示例输入:

 L = [['apple', '2 * core+1* sth'], ['pie', '1*apple+1*sugar+1*water'], ['water', 60]]
4

4 回答 4

4
def removespace(a):
    if type(a) is str:
        return a.replace(" ", "")
    elif type(a) is list:
        return [removespace(x) for x in a]
    elif type(a) is set:
        return {removespace(x) for x in a}
    else:
        return a

这是一个示例:

>>> removespace([["a ",["   "]],{"b ","c d"},"e f g"])
[['a', ['']], {'b', 'cd'}, 'efg']
于 2013-01-17T10:16:27.850 回答
2

我建议遵循 EAFP 并捕获异常而不是使用isinstance. 此外,千万不要错过使函数更通用的机会:

def rreplace(it, old, new):
    try:
        return it.replace(old, new)
    except AttributeError:
        return [rreplace(x, old, new) for x in it]

例子:

a = [" foo", ["    spam", "ham"], "  bar"]
print rreplace(a, " ", "")     

甚至更通用,尽管这可能对您的问题来说有点过头了:

def rapply(it, fun, *args, **kwargs):
    try:
        return fun(it, *args, **kwargs)
    except TypeError:
        return [rapply(x, fun, *args, **kwargs) for x in it]

a = [" foo", ["    spam", "ham"], "  bar"]
print rapply(a, str.replace, " ", "")     
print rapply(a, str.upper)     
于 2013-01-17T10:16:23.037 回答
0
def removespace(lst):
    if type(lst) is str:
        return lst.replace(" ","")
    else:
        return [removespace(elem) for elem in lst]



lst = [' apple', 'pie ', ['sth', ['banana', 'asd', [' sdfdsf', ['fgg']]]]] 
print removespace(lst)

印刷

['apple', 'pie', ['sth', ['banana', 'asd', ['sdfdsf', ['fgg']]]]]
于 2013-01-17T10:11:50.317 回答
0

尽管您可以尝试递归解决方案,但您可以尝试使用 Python 提供的出色库,将格式良好的 Python 文字从字符串转换为 Python 文字。

  • 只需将您的列表转换为字符串
  • 删除任何必要的空格
  • 然后使用ast.literal_eval重新转换为递归列表结构

    >>> lst = [' apple', 'pie ', ['sth', ['banana', 'asd', [' sdfdsf', ['fgg']]]]]
    >>> import ast
    >>> ast.literal_eval(str(lst).translate(None,' '))
    ['apple', 'pie', ['sth', ['banana', 'asd', ['sdfdsf', ['fgg']]]]]
    
于 2013-01-17T10:18:42.407 回答