2016-02-20 3 views
1

У меня есть список, например:вещий способ использовать циклический список

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

Пользователь имеет например, номер 16. Затем программе нужно вернуть номер в положение «16», здесь 6. Итак, если число больше длины списка, вы должны продолжить подсчет в начале список. После того, как этот элемент был напечатан, его необходимо удалить из списка. Затем пользователь должен выбрать новый номер для повторного запуска, но программа должна начать отсчет с позиции, где она закончилась. Если выбранное число равно 7, вам нужно добавить 7 позиций, начиная с позиции 6. Этот процесс должен повторяться в новом списке до тех пор, пока он не станет пустым.

Это то, что у меня есть до сих пор.

my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 
i = 0 
position = 0 

while i < len(my_list): 
    position += number 
    print(my_list[position]) 
    my_list.pop(position) 
    i += 1 
    number = int(input()) 

Проблема заключается в том, чтобы найти хороший способ распечатать номер с определенной позицией в списке.

+0

Вы знакомы с оператором modulo? Если нет, это может быть полезно. – timgeb

+0

Да, я проверил документы python и, например: print (my_list [16% 10]) wil дать мне 7. Спасибо за полезный отзыв. –

ответ

1

Другой ответ работает очень хорошо, но вот альтернативное решение, которое немного более кратким. Вместо того, чтобы использовать list.pop для удаления элемента из середины списка (а затем нужно отслеживать, откуда мы его удалили), этот код вместо этого перестраивает список после каждого поиска двумя операциями среза, так что элемент после одного мы удалим, будет в начале списка. Как хороший побочный эффект, мы больше не мутируем исходный список.

my_list = list(range(1, 11)) 
while my_list: # no need for len(lst) > 0 here, list are falsey when empty 
    index = int(input()) % len(my_list) # get index from the user, wrap if necessary 
    print(my_list[index])    # print out the value at the requested index 
    my_list = my_list[index+1:] + my_list[:index] # rebuild the list without that value 
1

Я думаю, если вы хотите, чтобы 16-й элемент был бы 7? 0 указатели и все такое. Если то случай, то я думаю, что это хороший простое решение:

my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 
while(len(my_list) > 1): 
    number = int(input("number:")) 
    index = 0; 
    number += index 
    while(number >= len(my_list)): 
     number = number % len(my_list) 
    index = number 
    print(my_list[number]) 
    my_list.pop(index) 

Если вы действительно хотите, число 6, то просто регулируя нумерацию на 1 будет работать нормально. Очевидно, что это можно улучшить разными способами. Я бы рекомендовал вам обратиться к решению, представленному @Blckknght, которое более кратким и позволяет избежать мутации.

Смежные вопросы