Хорошо, похоже, что вы хотите скопировать каждый 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
Длина чисел должна быть рассчитана снова, так как список может изменитьсяиз-за удаления элементов.