リストを検索して、ある要素のすべての出現箇所を別の要素に置き換える必要があります。これまでのところ私のコードでの試みは私をどこにも連れて行かないのですが、これを行うための最良の方法は何ですか?
例えば、私のリストが以下の整数を持っているとします。
>>> a = [1,2,3,4,5,1,2,3,4,5,1]
そして、必要な出力が次のようになるように、数字1のすべての出現箇所を値10で置き換える必要があります。
>>> a = [10, 2, 3, 4, 5, 10, 2, 3, 4, 5, 10]
したがって、私の目標は、1という数字のすべてのインスタンスを10という数字で置き換えることです。
>>> a= [1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1]
>>> for n, i in enumerate(a):
... if i == 1:
... a[n] = 10
...
>>> a
[10, 2, 3, 4, 5, 10, 2, 3, 4, 5, 10]
リスト内包表記はうまく機能し、enumerateを使ってループすることでメモリをいくらか節約できます(b/c操作は本質的にはその場で行われます)。
関数型プログラミングもあります。 map :の使い方を見る
>>> a = [1,2,3,2,3,4,3,5,6,6,5,4,5,4,3,4,3,2,1]
>>> map(lambda x: x if x != 4 else 'sss', a)
[1, 2, 3, 2, 3, 'sss', 3, 5, 6, 6, 5, 'sss', 5, 'sss', 3, 'sss', 3, 2, 1]
置き換える値が複数ある場合は、辞書も使用できます。
a = [1, 2, 3, 4, 1, 5, 3, 2, 6, 1, 1]
dic = {1:10, 2:20, 3:'foo'}
print([dic.get(n, n) for n in a])
> [10, 20, 'foo', 4, 10, 5, 'foo', 20, 6, 10, 10]
>>> a=[1,2,3,4,5,1,2,3,4,5,1]
>>> item_to_replace = 1
>>> replacement_value = 6
>>> indices_to_replace = [i for i,x in enumerate(a) if x==item_to_replace]
>>> indices_to_replace
[0, 5, 10]
>>> for i in indices_to_replace:
... a[i] = replacement_value
...
>>> a
[6, 2, 3, 4, 5, 6, 2, 3, 4, 5, 6]
>>>
a = [1,2,3,4,5,1,2,3,4,5,1,12]
for i in range (len(a)):
if a[i]==2:
a[i]=123
Forループまたはwhileループを使用できます。ただし、uが組み込みのEnumerate関数を知っている場合は、Enumerateを使用することをお勧めします。 1
あなたは単にPythonでリスト内包表記を使うことができます:
def replace_element(YOUR_LIST, set_to=NEW_VALUE):
return [i
if SOME_CONDITION
else NEW_VALUE
for i in YOUR_LIST]
あなたの場合、1のすべての出現箇所を10に置き換えたい場合、コードスニペットは次のようになります。
def replace_element(YOUR_LIST, set_to=10):
return [i
if i != 1 # keeps all elements not equal to one
else set_to # replaces 1 with 10
for i in YOUR_LIST]
リスト内の文字列を本当に簡単に置き換えることができます。
c = list(map(lambda b: b.replace("1","10"), a))