2016-04-19 4 views
-7

すべての可能な自然数、または少なくとも1から100万のすべての数値を含む変数を定義する必要があります。すべての数値を表す変数?

range機能は、私の特定の目的には適さないため、使用したくないです。変数を定義する他の方法はありますか?0の後に任意の数を表すことができますか?

EDIT: 変数を定義している間、私はrangeを使用している場合、それは数字のリストが含まれますが、私はリストを作成しないようにしようとしています。

の入った容器を表す、プログラムは私に数Xを与えていると私はそれがどの番号かわからないが、私は、変数var

+4

アプリケーションがどのようなものですか?なぜ範囲は機能しないのですか? –

+0

'yournum> 0とyournum <1000000:'#は何をするのですか? – Cfreak

+2

これはいくつかの文脈を提供するのに役立ちます。いくつかのサンプルコードを提供することができますか、または一般的な状況/要件を提供できますか?もしあなたが何をしようとしているのかが分かっていれば、より良い答えをあなたに提供することができます。 – gmiley

答えて

4
の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 
関連する問題