のPython 3.2で
以降で表される数X
を持っている必要があります万人に1からすべての整数が正しくrange
で行われます:それは非常に効率的です
>>> positive_nums_to_1M = range(1, 1000001)
>>> 1 in positive_nums_to_1M
True
>>> 1000000 in positive_nums_to_1M
True
>>> 0 in positive_nums_to_1M
False
。範囲内の数値は実際には生成されず、代わりにメンバーシップ(またはその欠如)が数学的に計算されます。
あなたは任意の正の整数をサポートし、いくつかの同等のオブジェクトを必要とし、やPython 2.xの中で、それが必要な場合は、独自のクラスを記述する必要がありますが、それは難しいことではありません。
from operator import index
class natural_num_range(object):
def __init__(self, maxnum=None):
if maxnum is not None:
maxnum = index(maxnum) # Ensure a true native int (or long)
self.maxnum = maxnum
def __contains__(self, x):
try:
x = index(x)
except TypeError:
return False
return x >= 1 and (self.maxnum is None or x < self.maxnum)
何かをしますrange
に似ていますが、一定の時間メンバーシップのテストを行うことができますので、start
またはstep
をサポートし、stop
を必要としないなし:
>>> natural = natural_num_range()
>>> all(i in natural for i in range(1, 10000000, 10000))
True
>>> any(i in natural for i in range(-100000000, 0, 10000))
False
アプリケーションがどのようなものですか?なぜ範囲は機能しないのですか? –
'yournum> 0とyournum <1000000:'#は何をするのですか? – Cfreak
これはいくつかの文脈を提供するのに役立ちます。いくつかのサンプルコードを提供することができますか、または一般的な状況/要件を提供できますか?もしあなたが何をしようとしているのかが分かっていれば、より良い答えをあなたに提供することができます。 – gmiley