0

range(start, stop, step)実際に呼び出す前に、への呼び出しから生じる要素の数を計算するにはどうすればよいですか。

コンテキストは、オブジェクトにスライスのインデックスを実装しているということです

def __init__(self, impl_object):
   self.impl=impl_object # the object that actually holds (or generates) an array of values
def __getitem__(self, key):
    if isinstance(key, slice):
         (start,stop,step)=key.indices( self.impl.numValues() )
         # It would be nice to know how many items I'm dealing with
         # here
    ...snip...

私は自分自身にそれを確信させましたstep>0
len(range(start,stop,step))==(start-stop+step-1)/step

しかし、これを負のステップに一般化する方法がわかりません。

編集:解決には時間がかかることが必要です(強く望んでいます)O(1)

4

3 に答える 3

4

最も簡単な方法は

len(xrange(start, stop, step))

xrange.__len__yieldメモリ内の範囲を構築せずに、要素の数を計算します。

于 2013-02-07T15:33:37.710 に答える
0

step ではなく abs(step) を使用してみてください。

于 2013-02-07T15:36:43.443 に答える