2016-11-17 22 views
2

検索スタックのオーバーフローがあり、この問題の解決策を見つけたのは残念ながら解決策を見つけることができませんでした。Python - リストに格納された文字列の値を別のリストの文字列値に置き換えるにはどうすればよいですか?

リストに格納されている文字列の値を別のリストの文字列の値に置き換えたいとします。

例えば、私は二つのリストを持っている:

list_a = ['file_x', 'file_x', 'file_x', 'file_x'] 
list_b = ['1', '2', '3', '4'] 

私は結果を返すようにしたい:

list_c =['file_1', 'file_2', 'file_3', 'file_4'] 

私のpythonに新しいですし、私はこれを行うのに苦労しています、私はAを使用して試してみましたforループとstr.replace()しかし、私はどのように各配列のキー値を一致させ、list_aの各要素を 'x'をlist_bの要素の文字列値に置き換えるかわかりません。

これについてのお手伝いがあれば幸いです。

答えて

7

対応するaおよびbを結合するためにzipを使用してください。

>>> list_c = [] 
>>> for a, b in zip(list_a, list_b): 
... list_c.append(a.replace('x', b)) 
... 
>>> list_c 
['file_1', 'file_2', 'file_3', 'file_4'] 

>>> list(zip(list_a, list_b)) 
[('file_x', '1'), ('file_x', '2'), ('file_x', '3'), ('file_x', '4')] 

私たちは、その後、a.replace('x', b)をやって、我々の結果リストに結果の値を追加し、別の変数abにペアを開梱、forループで簡単にこのzipオブジェクトを使用することができます

これは短いリスト内訳としても書ける:

>>> [a.replace('x', b) for a, b in zip(list_a, list_b)] 
['file_1', 'file_2', 'file_3', 'file_4'] 

そしてMoinuddinが指摘するように、あなたがlist_aのフォーマットを作成する1ある場合はlist_a

+0

ありがとうございます!これは本当に問題を解決するだけでなく、配列を処理する新しい方法を教えてくれました。 – Lewis909

+1

@ Lewis909彼らはリストです:D –

+0

ああ、Pythonには配列がないので、代わりにリストがあります。 – Lewis909

3

の内容を定義した場合、ここでフォーマット文字列を使用して、より良いオプションです。より良い方法は、xの代わりに{}を使用し、str.format()を使用して文字列を書式設定することです。例:

>>> list_a = ['file_{}', 'file_{}', 'file_{}', 'file_{}'] 
>>> list_b = ['1', '2', '3', '4'] 
>>> [a.format(b) for a, b in zip(list_a, list_b)] 
['file_1', 'file_2', 'file_3', 'file_4'] 
+0

str.format()を見ていきます。これはstr.replace()とどう違うのですか? – Lewis909

+0

'str.replace( 'x')'は、文字列の一部であっても 'x'のすべての文字を置き換えます。 '{}'が '{}'の代わりにあなたの値を置きます。 –

+1

@ Lewis909あなたの文字列にはリテラル '{'と '} 'を含めることができます(フォーマット文字列でそれらを二重にするだけでいいです;''文字列は{{と}}を含むことができ、 '.format(value) ' –

関連する問題