2017-06-10 24 views
2

いくつかの文字列で構成される配列があり、アスタリスクで各文字列を囲む必要があります。だから、入力のために:特定の文字の配列内のサラウンド文字列

def addAsterisks(["abc", "ded"]) 

出力は次のようになります。 `ここ

["*abc*", "*ded*"] 

は、私は(画像が入力配列である)試してみましたが、それは仕事を得ることができないものです。

for x in picture: 
    x = "*" + x + "*" 

出力は、単純に同じ文字列の配列である:

+0

"それが仕事を得ることができない" - あなたは何が起こるかを説明できますか? –

+1

Pythonの文字列は不変なので、あなたの解決策は機能しません – pramod

答えて

2
["abc", "ded"] 

xはローカル変数であるため、一度変数が範囲外になると変数を変更することは意味がありません。あなたは、例えば、修正リストを返すと、どこかに割り当てることができます:あなたは、実際のリストを変更しない一時変数x、に割り当てる

def addAsterisks(l) 
    return ['*' + x + '*' for x in l] 

myList = addAsterisks(["abc", "ded"]) 
0

for i,x in enumerate(picture): 
    picture[i] = "*" + x + "*" 
0

あなたはまた、次のように行うことができます:

In [22]: def addAsterisks(s): 
    ...:  newarr = [] 
    ...:  for i in s: 
    ...:   newstr = "*" + str(i) + "*" 
    ...:   newarr.append(newstr) 
    ...:  print(newarr) 
    ...:  

In [23]: addAsterisks(["abc", "ded"]) 
['*abc*', '*ded*'] 
1

をあなたのリストの変更を反映するためにリストを変更する必要がありますが、ループをしたい場合は、代わりに

return ["*" + x + "*" for x in picture] 

を試しますか。コンパクトなコードのためにインライン関数を使用しました。

コード

['*'+ i + "*" for picture in pictures] 

入力

["abc", "def"] 

出力

["*abc*", "*def*"] 
1

は、配列を変更しに戻りますあなたが使いたい場所。一時変数(x)を修正すると、あなたが範囲外になったときにuが緩んでしまうので動かないでしょう。

def addAsterisks(string_list): 
    return ['*' + x + '*' for x in string_list] 

print addAsterisks(["abc", "ded"]) 

この意志出力:

A = [ "*"+a+"*" for a in picture ] 

ヒント:Pythonでおよそリスト内包を読む

['*abc*', '*ded*'] 
0

ここでは、この問題に取り組むのPython的な方法です。

1

あなたはまた、使用することができ、str.format()

def addAsterisks(a): 
    # Or: 
    # return ["*%s*" %k for k in a] 
    return ["*{}*".format(k) for k in a] 

print(addAsterisks(["abc", "ded"])) 
>>> ['*abc*', '*ded* 
関連する問題