2

私は得たlistx =[1,2,3,4,5,6,7,8,9]

リストの N 番目ごとの項目を変更したい。たとえば、2項目ごとに変更したい場合、 +1 で変更したいとします。だから私は結果を取得したい=[1+1,2,3+1,4,5+1,6,7+1,8,9+1] =[2,2,4,4,6,6,8,8,9]

for-loop を使用して、カウンター変数を追加し、counter%2==0 でカウンターをチェックすることでこれを行うことができます。しかし、今回は単一行のステートメントを使用することに興味があります。ここで私が欲しいもの=

newlistx=[i+1 for i in listx]<-これによりすべてのアイテムが変更されるため、この反復プロセスで内部インデックスを使用できると期待しています。次のようになります。

newlistx=[i+1 if (__indexing__%step==0) else i for i in listx]ここで、ステップ = 2。

実際には、次のように list.index() function を使用できます。

newlistx=[i+1 if listx.index(i)%2==0 else i for i in listx]

この問題は、すべてのアイテムが一意である場合にのみ機能します。同じ値を持つアイテムを取得した場合、index() は間違った値を返します。

繰り返しますが、内部インデックスまたはカウンターが存在する場合は取得できるかどうかに興味があります。

4

2 に答える 2

7

機能を使用できますenumerate

newlist = [x + 1 if n % step == 0 else x
           for (n, x) in enumerate(oldlist)]

このenumerate関数はシーケンスを繰り返し処理し、オブジェクトとそのインデックスを生成します。

于 2012-06-19T09:20:39.437 に答える
1
new_list = [n + 1 if i & 1 else n for i, n in enumerate(listx)]
于 2012-06-19T11:32:31.947 に答える