web-dev-qa-db-ja.com

リスト内の要素を見つけて置き換える(python)

リストを検索して、ある要素のすべての出現箇所を別の要素に置き換える必要があります。これまでのところ私のコードでの試みは私をどこにも連れて行かないのですが、これを行うための最良の方法は何ですか?

例えば、私のリストが以下の整数を持っているとします。

>>> 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という数字で置き換えることです。

197
James
>>> 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]
191
ghostdog74

リスト内包表記三元演算子 を使用してみてください。

>>> a=[1,2,3,1,3,2,1,1]
>>> [4 if x==1 else x for x in a]
[4, 2, 3, 4, 3, 2, 4, 4]
417
outis

リスト内包表記はうまく機能し、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]
26
damzam

置き換える値が複数ある場合は、辞書も使用できます。

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]
20
roipoussiere
>>> 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]
>>> 
9
John La Rooy
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

6
Eimal Dorani

以下はPython 2.xにおける非常に直接的な方法です。

 a = [1,2,3,4,5,1,2,3,4,5,1]        #Replacing every 1 with 10
 for i in xrange(len(a)):
   if a[i] == 1:
     a[i] = 10  
 print a

この方法はうまくいきます。コメントは大歓迎です。それが役に立てば幸い :)

また、 outisの および damzamの ソリューションがどのように機能するかを理解してみてください。リスト圧縮とラムダ関数は便利なツールです。

2
Ananay Mital

あなたは単に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]
1
bassel7

リスト内の文字列を本当に簡単に置き換えることができます。

c = list(map(lambda b: b.replace("1","10"), a))

1
J.Paul