Ejemplo:- list1 = [a, b, c, d, e] tiene la ubicación de índice 0, 1, 2, 3, 4 ¿Podemos hacer que las ubicaciones de índice para list1 -2, -1, 0, 1, 2

respuesta

puedes hacer esto por: -

list1 = ['a', 'b', 'c', 'd', 'e']
re_arrange_order = [-2, -1, 0, 1, 2]
for i in range(len(list1)):
    list1[i] = list1[re_arrange_order[i]]
print(list1)

No se puede cambiar el índice de una lista. Sin embargo, puedes hacerlo de otras maneras. Por ejemplo

from collections import namedtuple

test = namedtuple("test", ["value", "index"])
v = [1, 2, 3, 4, 5]
result = []
start_index = -2
for i in v:
    result.append(test(value=i, index=start_index))
    start_index += 1

print(result)
print(result[0].index)

Producción

[test(value=1, index=-2), test(value=2, index=-1), test(value=3, index=0), test(value=4, index=1), test(value=5, index=2)]
-2

Las listas solo se pueden indexar a través de números enteros positivos (los negativos tienen un comportamiento especial para comenzar a buscar desde el final de la lista) y tienen un rango contiguo hasta el tamaño de la lista.

Si desea indexar por otros medios, use un diccionario o cree un método de ayuda para hacer esta traducción por usted. Alternativamente, podría subclasificar la lista (pero esta es la más compleja y tiene muchos casos de esquina para considerar):

Solución de diccionario.

list1 = ['a', 'b', 'c', 'd', 'e']
list1 = {i - 2: v for i, v in enumerate(list1)} 
print(list1[-2])
a

Solución del método auxiliar:

def fetch_val(data, i):
    return data[i + 2]

fetch_val(['a', 'b', 'c', 'd', 'e'], -2)
a

Anular la clase de lista:

class SpecialList(list):
    def __init__(self, start, *args, **kwargs):
        self.start = start
        super().__init__(*args, **kwargs)

    def __getitem__(self, item):
        return super().__getitem__(item - self.start)

    def __setitem__(self, key, value):
        super().__setitem__(key - self.start, value)


list1 = SpecialList(-2, ['a', 'b', 'c', 'd', 'e'])
print(list1[-2])
a