1

次のリストがあるとします。

my_list = [2, 3, 4, 1, 44, 222, 43, 22]

forループを使用せずに、サブリスト内のすべての要素に定数値を割り当てるにはどうすればよいですか? 何かのようなもの:

my_list[0:5:1] = 1 # Assign 1 to first 5 elements. This code is wrong since list requires an iterator 

具体的には、インデックスからリストiまで、すべての要素に定数値を割り当てたいと思います。end

my_list[i:end] = 1 # What I would like to do. The code itself is wrong  

Pythonで最もクリーンな方法でそれを行う方法に関する提案はありますか?

4

6 に答える 6

6

2ライナーの方が1ライナーよりも優れている場合があります。

for i in range(0,5):
    my_list[i] = 0

本当に難解なものを作りたい場合:

これは、元の配列を変更せずに仕事をするワンライナーです。

new_list = [0 if i in range(0,5) else x for x, i in zip(my_list, xrange(len(my_list)))]

どちらを未知のコードで見つけたいですか?または、6か月後の独自のコード。

于 2012-07-05T19:50:24.313 に答える
4

以下が機能するはずです。

my_list[i:end] = [1]*(end-i)

例:

>>> def test(my_list, i, end):
...     my_list[i:end] = [1]*(end-i)
...     return my_list
>>> test(range(10), 0, 5)
[1, 1, 1, 1, 1, 5, 6, 7, 8, 9]
>>> test(range(10), 5, 10)
[0, 1, 2, 3, 4, 1, 1, 1, 1, 1]
>>> test(range(10), 3, 8)
[0, 1, 2, 1, 1, 1, 1, 1, 8, 9]
于 2012-07-05T19:53:20.527 に答える
2

1つの可能性はstuff [0:5] = [1] * 5です。ただし、置換要素の数を間違えるとリストのサイズが変わるため、注意が必要です。これを行うstuff [0:5] = [1] * 6と、リストのサイズが大きくなります(つまり、5つの元の値があった場所に6つの1を配置します)。

于 2012-07-05T19:52:19.897 に答える
1

リストの最後に移動するには、スライスの最後を省略します。次に、リストを繰り返して割り当てることができます。

my_list[i:] = [1] * (len(my_list) - i)
于 2012-07-05T19:55:22.760 に答える
1

これはどう?

from itertools import repeat

my_list[start:end] = repeat( 1, end - start )
于 2012-07-05T20:40:54.923 に答える
0

これは機能しますか:

my_list = my_list[:i] + [1 for x in xrange(len(my_list) - i)]
于 2012-07-05T19:49:39.533 に答える