Тот, который вы перечислили, является наиболее оптимальным способом получения элементов из кортежа.Обычно в таких выражениях вас не волнует производительность - это преждевременная оптимизация, и даже если вы это сделали, такие операции уже слишком медленные, даже с оптимизацией, т.е. если вы оптимизируете доступ, сам цикл все равно будет медленным из-заподсчет ссылок на временные переменные и т. д.
Если у вас уже есть проблема с производительностью или она уже является частью загруженного кода процессора, вы можете попробовать несколько вариантов:
1) numpy
массивы:
>>> arr = np.array(xrange(2000))
>>> mask = np.array([True]*2000)
>>> mask = np.array([False]*2000)
>>> mask[3] = True
>>> mask[300] = True
>>> arr[mask]
array([ 3, 300])
2) Вы можете использовать C API для копирования элементов, используя PyTuple_GET_ITEM
, который напрямую обращается к внутреннему массиву, но имейте в виду, что использование C API не тривиально и может ввести многоошибки.
3) Вы можете использовать массивы C с C API, используя, например, интерфейс буфера array.array
для склеивания доступа к данным в Python.
4) Вы можете использовать Cython сC-массивы и пользовательский тип Cython для доступа к данным из Python.
5) Вы можете использовать Cython и numpy
вместе.