Индексы списка - Если слишком большой, вернитесь к началу списка - PullRequest
0 голосов
/ 25 апреля 2018

Так что, может быть, этот вопрос будет звучать очень начинающе, но я просто не знаю, как мне начать с этого примера:

Итак, пример: у меня есть список, например, длиной 13 пунктов (1, 2,3,4 ... 13) Есть заданное число, скажем, 6

Программа должна показать мне в списке, в каком порядке выпадут числа.Если второе число равно 6, это означает, что каждый раз, когда шестой элемент является следующим, который выпадет.Но моя проблема в том, как я могу сказать python, что, если число индекса слишком велико, он должен начать отсчет с самого начала?

Это то, что я сделал сам до сих пор

x = int(input("Number of items (numbers): "))
y = int(input("Fall-out number: "))
#n = 1
#id = 0
numbers = [n for n in range(x+1)]
fallsout = []
numbers.remove(30)

for i in numbers:
    if i % y == 0:
        fallsout.append(i)

print (numbers)
print (fallsout)

Вот пример того, что должно быть на входе и выходе:

Вход: x = 13 y = 6

Выход: 6 12 5 13 8 3 1 11 2 7 4 10 9

1 Ответ

0 голосов
/ 25 апреля 2018

Хорошо, похоже, что вы хотите скопировать каждый 6-й элемент из чисел в выпадение, а затем удалить элемент из чисел и продолжать циклически, пока числа не станут пустыми.

import copy

x = int(input("Number of items (numbers): "))
y = int(input("Fall-out number: "))
# list should start from 1 as by the example
numbers = [n for n in range(1,x+1)]
# deep copy to preserve original list
numbers_copy = copy.deepcopy(numbers)
fallsout = []

count = y
while len(numbers_copy)!=0:
    fallsout.append(numbers_copy[count-1])
    # remove element
    del numbers_copy[count-1]
    # handle starting edge
    if count == 0:
        count = 1
    # handle last edge
    if numbers_copy != []:
        count = (count+y-1)%len(numbers_copy)

print numbers
print fallsout

Выходные данные

Number of items (numbers): 13
Fall-out number: 6
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
[6, 12, 5, 13, 8, 3, 1, 11, 2, 7, 4, 10, 9]

Объяснение :

Предположим, у меня есть массив чисел = [1,2,3,4,5,6] длины = 6, и яиспользуя счетчик "count", чтобы перебрать список.Таким образом,

numbers [count] = 2 (когда count = 1)

Затем, чтобы посмотреть на следующий элемент, я использовал бы числа [count + 1],Чтобы вернуться к началу списка, мы используем операцию модуля,

count = (count + number_of_steps)% len (числа)

например, при index =4 и для перехода на 3 шага, следующим индексом будет (4 + 3)% 6 = 1. Теперь нам нужно скопировать каждый y-й элемент из списка, поэтому мы используем

fallsout.append(numbers_copy[count-1]) # count-1 as we are counting from 0

Затем мы удаляем это числоиз списка

del numbers_copy[count-1]

Затем мы переместимся вперед на y шагов по модулю, как обсуждалось выше,

count = (count+y-1)%len(numbers_copy) # again -1 as we count from 0

Длина чисел должна быть рассчитана снова, так как список может изменитьсяиз-за удаления элементов.

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