2016-10-29 9 views
2

基本的には、n連続要素を変更する方法でリストを変更する関数を使用する必要があります。しかし、問題は、私はリストを返すことができません(関数は本当に何も返すことはできません)ので、私は私の関数の引数を持っているリストを変更しないので、私の理解には、私は新しいリストを作成することはできません。新しいリストを作成せずにリスト内のn個の連続した要素を変更するにはどうすればよいですか?

私はこのようなwhileループでそれをやった:リスト内包またはそのような何かに似て、これに他のソリューションは、存在する場合

while i < length: 
    my_list[index+i] = element 
    i += 1 

私は思っていました。私はPythonの初心者です。これは純粋に探査のためのものです。

答えて

6

あなたは、このために、スライスの割り当てを使用することができます。

my_list[index:index + length] = (e for _ in range(length)) # or (e,) * length 

上記の行は、割り当ての右側にあるのiterableから要素を[index, index + length)間隔内の位置にmy_listの要素を置き換えます。スライスの長さとiterableの長さが一致しなければならないことに注意してください。それ以外の場合は、要素の一部が削除され(反復可能な要素が短い場合)、要素が追加されます(繰り返し可能な要素が長い場合)。

例:

In [14]: my_list = [1, 2, 3, 4, 5, 6] 

In [15]: index, length, element = 1, 3, 0 

In [16]: my_list[index:index + length] = (element for _ in range(length)) 

In [17]: my_list 
Out[17]: [1, 0, 0, 0, 5, 6] 
+0

これは、私が探していたまさに感謝です:) –

関連する問題