Python сделать круговой список, чтобы выйти из диапазона индекса - PullRequest
0 голосов
/ 21 апреля 2020

Я ищу способы превратить список в круговой список, чтобы я мог позвонить по номеру с индексом вне диапазона.

Например, в настоящее время у меня есть этот класс:

class myClass(list):
  definitely __init__(self, *x):
    super().__init__(x)

, который работает как:

>> myList = myClass(1,2,3,4,5,6,7,8,9,10)
>> print(myList)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

и после создания списка, я хочу:

>> myList[2]
3
>> myList[12]
3
>> myList[302]
3
>> myList[-1]
10
>> myList[-21]
10
...

В данный момент индексы [12], [302] и [- 21] не представляется возможным, поскольку он выходит за пределы диапазона для одного списка, поэтому я хочу создать циклический список, если индекс выходит за пределы диапазона, что затем сделает их возможными.

  • myList [12 ] = 3, потому что круговой список будет [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, ...].
  • Список будет составлен только из 5 или 10 цифр.

1 Ответ

3 голосов
/ 21 апреля 2020

Если вы настаиваете на создании целого класса для этого, подкласс UserList, реализуйте __getitem__ и используйте оператор по модулю (%) с длиной списка:

class myClass(UserList):
    def __getitem__(self, item):
        return super().__getitem__(item % len(self))

myList = myClass([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
print(myList[12])

выходы

3

В зависимости от вашего использования, вам может понадобиться реализовать несколько других list методов.

CAVEAT: Be осторожно, чтобы не oop более myList. Это создаст бесконечное число l oop, потому что __getitem__ всегда сможет предоставить элемент из списка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...