3

ブール値のリストがあります。開始インデックスと終了インデックスのリストもあります。Trueブール値のリストでは、インデックスのリストで定義されたスライスのいずれかに含まれていない限り、各値を にします。私が書いたものは非常にぎこちなく感じます。より良いものにするための提案はありますか?

bools = [True] * 15
events = [(3, 5), (11, 16)]
for e in events:
    bools[e[0]:e[1]] = [False for x in range(*e)] 

特に、私はその部分が好きではありません[False for x in range(*e)]。スライスをいじりrange(*e)始めると、乱雑になり始めます。たとえば、次のようになります。

    bools[e[0]:e[1]+2] = [False for x in range(e[0], e[1]+2)]

リスト/スライス内のすべての値を同じ値にする構文があれば、本当にいいでしょう。

    bools[e[0]:e[1]+2] = False

しかし、これは明らかに正しい構文ではありません。何か案は?

4

3 に答える 3

1
from itertools import repeat
for e in events:
    bools[e[0]: e[1]] = repeat(False, e[1] - e[0]) 
于 2013-11-12T02:27:11.350 に答える
0

numpy の使用に興味がありますか?

bools[e[0]:e[1]+2] = False

numpyで動作します。このようなことを可能にする独自のスライスオブジェクトを直接作成することもできます

slices = [np.s_[3:6], np.s_[11:17]]
for s in slices:
    bools[s] = False

s_ を使用すると、範囲を列挙するだけでなく、スライス構文 (ステップ サイズ、リストの終わりからのインデックス作成、省略記号) が完全にサポートされます。

于 2013-11-12T02:09:31.537 に答える