3

私はa[0:2]範囲のフォーマットを使用してきましたが、私が持っている場合はa = range(0, 5)取得しますa[0, 1, 2, 3, 4]が、使用するa[0:-1]と取得するのが気になりa[0, 1, 2, 3]ました。

使用すればa[0:]全範囲を取得できますが、範囲の最後を変数で定義したい場合 (例: c = -1then a[0,c])、条件ステートメントを使用せずに全範囲を取得する方法はありません (たとえば、 : if c == -1: c = None)。

変数を制限として使用しながら、範囲全体にアクセスできるようにするために使用できる素敵な形式はありますか? それとも、条件文が必要で立ち往生していますか?

ありがとう。

編集: 2 つのオプションを使用できるようです。None条件付きで変数を設定するか、変数を設定して最後の項が に設定されるようにすることができますlen(a)。どの道を行くかはまだ100%確信が持てませんが、皆さんの反応に感謝します。

4

5 に答える 5

4

に割り当てるだけNoneですc

c = None
a[2:c]

それはあなたが望むように動作します。実際、それがスライス (範囲ではない) の作成方法です。

それらは実際には通常の Python オブジェクトです。内部でも使用できます[]

a = [0, 1, 2, 3]
s = slice(2, None)
a[s]  # equal to a[2:]
于 2012-08-16T14:17:02.333 に答える
2

a[0:]は単なるシンタックスシュガーですa[0:len(a)]

したがって

c = len(a)
a[0:c]         #a[:c], a[:], a[0:] all work as well

フルレンジを提供します。

于 2012-08-16T14:28:06.907 に答える
0

あなたが使用することができますslice

endLimit = int(raw_input("what is the limit?"))
if endLimit == 0:
    endLimit = None
range(5)[slice(0,endLimit)]

スライスは実際にはオブジェクトであり、はの[start:end:jumps]一部を表しますrange(5)[start:end:jumps]

于 2012-08-16T14:20:45.333 に答える
0

三項演算子を使用できます。

a[0:c if c>0 else None]

しかし、それはかなり醜いです。

「スライス全体を取得するために -1 を使用するのはなぜですか?」という質問の方が適切だと思います。Python は、最終要素に到達するために既に使用-1しています (ただし、最終要素は含みません)。その振る舞いを変えることは、その言語に精通している人々にとって予期しない結果につながるだけです. この関数のユーザーが完全なスライスを取得したい場合は、 を渡す必要があるという事実を文書化するだけNoneです。

于 2012-08-16T14:16:43.180 に答える
0

編集:OPが探しているものを正確に理解したので、これがその方法です:

a[0:c if c != 0 else len(a)]

三項を使用するか、本当に条件を使用したくない場合は、これがまさにあなたが望むことを行い、c = 0 で完全なスライスを提供すると確信しています。

a[0:((c-1) % len(a)) + 1]

---------------------- 古い投稿 -------------------------- -

まあ、私は何かが足りないかもしれませんが、あなたは任意に高くすることができます. もしあなたがそうするなら:

a = range(5)
a[0:200]

あなたは得る:

[0, 1, 2, 3, 4]

したがって、c がちょうど成長しているか、独自のことを行っている場合、c ≥ len(a) になるたびに全範囲が与えられます。

于 2012-08-16T15:01:04.023 に答える