4

リスト内のすべての N 番目の要素を別の要素に設定したいと考えています。

(Matlab用のこの質問のように。)

N=2 での試みは次のとおりです。

>>> x=['#%d' % i for i in range(10)]
>>> x
['#0', '#1', '#2', '#3', '#4', '#5', '#6', '#7', '#8', '#9']
>>> x[0::2] = 'Hey!'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: attempt to assign sequence of size 4 to extended slice of size 5

どうすればこれを修正できますか? スライスは、単一の値だけでなく、イテラブルを期待しているようです。

4

2 に答える 2

5

スライス割り当ての右側は、適切な長さのシーケンスでなければなりません。Python は'Hey!'文字列として扱っています'H', 'e', 'y', '!'

賢く、適切な長さのシーケンスを作成できます。

x[::2] = ['Hey!'] * len(x[::2])

ただし、これを行う最も明確な方法はforループです。

for i in range(0, len(x), 2):
    x[i] = 'Hey!'
于 2013-04-09T18:31:31.407 に答える
1

リスト内包表記でも可能です:

x=['#%d' % i for i in range(10)]
['Hey!' if i%3 == 0 else b for  i,b in enumerate(x)]

これは明らかに n=3 です。

于 2013-04-09T18:33:29.183 に答える