11

変な質問があります: 決して変わらない 64 個の数字のリストがあります:

(2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124, 126, 128)

標準の 0 ~ 63 ではなく、1 ~ 64 のインデックスを使用してこれらの数値にアクセスできるようにする Python のデータ構造が必要です。これは可能ですか?これを達成する最善の方法は、辞書を作成することでしょうか?

4

4 に答える 4

41

0構造体の先頭にa を挿入するだけです。

(0, 2, 4, 6, 8, ...)
于 2012-07-24T02:34:40.047 に答える
6

item getterをオーバーライドして、特殊なタプルを作成できます。

class BaseOneTuple(tuple):
    __slots__ = () # Space optimization, see: http://stackoverflow.com/questions/472000/python-slots 
    def __new__(cls, *items):
        return tuple.__new__(cls, items) # Creates new instance of tuple
    def __getitem__(self, n):
        return tuple.__getitem__(self, n - 1)


b = BaseOneTuple(*range(2, 129, 2))
b[2] == 4
于 2012-07-24T02:36:13.137 に答える
4

ディクショナリを使用することも、アクセスする前にインデックスからディクショナリを差し引くこともできます。

また、あなたの 64 の数は単純な等差数列にあることに注意してください。なぜそれらを保存するのですか?これを使用できます:

def my_number(i):
    return 2*i

あなたが示したリストが実際の例であり、実数がより複雑な場合は、ダミーの最初の要素を持つリストを使用してください。

my_nums = [0, 2, 4, 6, 8, ....]

次に、 として 2 を取得できますmy_nums[1]

于 2012-07-24T02:29:33.157 に答える
3

range(2, 129, 2)1 ~ 128 の範囲の数値を 2 刻みで生成し、変更しない場合はこのリストをタプルに変換するために使用できます。

t = tuple(range(2, 129, 2))

def numbers(n):
   return t[n-1]

グローバル tuple を指定するtと、関数numbersは (0 ベースではなく) 1 ベースのインデックスを使用して要素を取得できます。

于 2012-07-24T02:30:08.243 に答える