2

リストのリストのリストである入力からすべてのスペースを削除しようとしています...「else:」に対して何をすべきかわかりません

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 に答える