3

Pythonで、リスト内の要素を別のリストの要素に置き換える最良の方法は何ですか?

たとえば、私は次のようにしています。

a = [ 1, 'replace_this', 4 ]

に置き換えreplace_thisたい[2, 3]。交換後は次のようにする必要があります。

a = [ 1, 2, 3, 4 ]

アップデート

もちろん、スライスを使用することもできますが(質問に記述しなかったのは残念です)、問題はreplace_this、リストに複数の値が含まれている可能性があることです。この場合、ループで置換を行う必要があり、これは最適ではなくなります。

使ったほうがいいと思いますが、よくitertools.chainわかりません。

4

2 に答える 2

12

スライスを使用できます。

>>> a = [ 1, 'replace_this', 4 ]
>>> a[1:2] = [2, 3]
>>> a
[1, 2, 3, 4]

そして、@ mgilsonが指摘しているように、置き換える要素の位置がわからない場合は、それa.indexを見つけるために使用できます...(彼のコメントを参照)

スライスを使用しないことに関連する更新

を使用してitertools.chain、反復可能であることを確認しreplacementsます。

from itertools import chain

replacements = {
    'replace_this': [2, 3],
    4: [7, 8, 9]
}

a = [ 1, 'replace_this', 4 ]
print list(chain.from_iterable(replacements.get(el, [el]) for el in a))
# [1, 2, 3, 7, 8, 9]
于 2013-02-06T14:19:29.177 に答える
1

要素を置き換えるためにジェネレーターを使用し、それを平坦化するために別のジェネレーターを使用します。flatten提供されているリンクに次のようなジェネレーターが機能していると仮定します。

def replace(iterable, replacements):
    for element in iterable:
        try:
            yield replacements[element]
        except KeyError:
            yield element

replac_dict = {
    'replace_this': [2, 3],
    1: [-10, -9, -8]
}
flatten(replace(a, replac_dict))
# Or if you want a list
#list(flatten(replace(a, replac_dict)))
于 2013-02-06T16:54:14.030 に答える