tuplas por metodos listas lista funcion estructura diccionarios datos comprensión colecciones python data-structures

metodos - listas por comprensión python



Índice de estructura de datos Python ¿Comienza en 1 en lugar de 0? (4)

Puede usar el range(2, 129, 2) para generar los números en el rango de 1 a 128 en incrementos de 2 y convertir esta lista en una tupla si no va a cambiar.

t = tuple(range(2, 129, 2)) def numbers(n): return t[n-1]

Dada la tupla t global, los numbers función podrían recuperar elementos usando un índice basado en 1 (en lugar de 0).

Tengo una pregunta extraña: tengo esta lista de 64 números que nunca cambiará:

(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)

Necesito una estructura de datos en Python que me permita acsesar estos números usando un índice de 1-64 en comparación con el estándar de 0-63. es posible? ¿La mejor manera de lograr esto sería construir un diccionario?


Puede usar un diccionario, o simplemente puede restar uno de su índice antes de acceder a él.

Además, observo que sus 64 números están en una progresión aritmética simple. ¿Por qué almacenarlos? Puedes usar esto:

def my_number(i): return 2*i

Si la lista que mostró era realmente un ejemplo, y los números reales son más complicados, entonces use una lista con un primer elemento ficticio:

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

Entonces puedes obtener 2 como my_nums[1] .


Solo inserta un 0 al comienzo de la estructura:

(0, 2, 4, 6, 8, ...)


Puede anular el captador de elementos y crear una tupla especializada:

class BaseOneTuple(tuple): __slots__ = () # Space optimization, see: http://.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