2

リストから値を返すコードがあります。私は強く型付けされた遺伝的プログラミング (優れた DEAP モジュールを使用) を使用していますが、1&はand と0同じであることに気付きました。これは、関数が整数を予期している場合、ブール関数になってしまう可能性があることを意味し、これがいくつかの問題を引き起こしています。TrueFalse

例えば: list = [1,2,3,4,5]

list[1]戻り値2

list[True]も返す2

これを防ぐPythonicの方法はありますか?

4

1 に答える 1

3

ブール値のインデックスを許可しない独自のリストを定義できます。

class MyList(list):
    def __getitem__(self, item):
        if isinstance(item, bool):
            raise TypeError('Index can only be an integer got a bool.')
        # in Python 3 use the shorter: super().__getitem__(item)
        return super(MyList, self).__getitem__(item)

インスタンスを作成します。

>>> L = MyList([1, 2, 3])

整数が機能します:

>>> L[1]
2

しかし、Trueしません:

>>> L1[True]
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-888-eab8e534ac87> in <module>()
----> 1 L1[True]

<ipython-input-876-2c7120e7790b> in __getitem__(self, item)
      2     def __getitem__(self, item):
      3         if isinstance(item, bool):
----> 4             raise TypeError('Index can only be an integer got a bool.')

TypeError: Index can only be an integer got a bool.

それに応じてオーバーライド__setitem__して、ブール値をインデックスとして値を設定しないようにします。

于 2015-11-15T10:47:18.993 に答える