3

リスト内の 1 つの項目を 2 つ以上の項目にプログラムで置き換えるにはどうすればよいですか? 私は分割とインデックスでそれをやっています、そしてそれは非常に非パイソンに見えます。

私はこのようなものが存在することを望んでいます:

values = [ "a", "b", "old", "c" ]
[ yield ["new1", "new2"] if item == "old" else item for item in values ]
// return [ "a", "b", "new1", "new2", "c" ]
4

4 に答える 4

2

あなたの考えは正しいと思います。ただし、リスト内包表記が常に適切であるとは限りません。

リスト連結を使用したソリューションは次のとおりです。

values = [ 'a', 'b', 'old', 'c' ]

def sub1(values, old, new):
    newvalues = []
    for item in values:
        if item == old:
            newvalues += new
        else:
            newvalues += [item]
    return newvalues

print sub1(values, 'old', ['new1', 'new2'])

ここでは、ジェネレーターを使用しています。

def sub2(values, old, new):
    for item in values:
        if item == old:
            for i in new:
                yield i
        else:
            yield item

for i in sub2(values, 'old', ['new1', 'new2']):
    print i
于 2013-08-28T21:51:20.357 に答える
-1

わかった。より機能的ですが、それが本当に「Pythonic」であるかどうかはわかりません。

reduce(operator.add, [ [x] if x != 'old' else ['new1','new2']  for x in values ] )

itertools の代わりに reduce を除いて、別の答えと本当に同じです。

Reduce は標準的な関数型プログラミングのイディオムであるため、それが何をするのかがより明確になるはずです。

itertools.chain.from_iterable はクールですが、あいまいです。

于 2013-08-29T01:37:08.637 に答える