Итерация по каждому другому элементу в списке рекурсивно - PullRequest
0 голосов
/ 12 ноября 2018

Я пытался найти ясный и краткий метод для перебора элементов в списке в виде рекурсивного цикла.

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

My_list = [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]

Я бы хотел извлечь все остальные элементы из списка.

New_list = [2, 6, 10, 14, 18]

Затем я хочу взять отброшенные значения и взять каждую секунду из них. И так далее, рекурсивно.

Поскольку мой первый прогон по списку закончился в 18, я пропущу более 20 и вернусь к началу списка, поскольку я хочу извлечь все остальные элементы.

My_list = [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]

# Elements not been used after first operation = [4, 8, 12, 16, 20]

New_list = [2, 6, 10, 14, 18, 4, 12, 20, 8, 16]  # desired output

Какие методы я могу использовать для зацикливания в списке?

Ответы [ 3 ]

0 голосов
/ 12 ноября 2018

Да, вы можете использовать цикл while с генератором:

L = [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]

def recursive_odds(x):
    while x:
        yield from x[::2]
        x = x[1::2]

res = list(recursive_odds(L))

[2, 6, 10, 14, 18, 4, 12, 20, 8, 16]
0 голосов
/ 12 ноября 2018

используя цикл while вы можете сделать это:

final=[]
while len(mylist)>0:
     final.extend(mylist[::2])
     mylist=mylist[1::2]
print(final)
0 голосов
/ 12 ноября 2018

Вы можете использовать действительно классный синтаксис Python:

new_list=my_list[::2]

чтобы получить любой другой элемент.

Это означает, что new_list есть my_list от начала до конца с шагом 2

тогда ваши основные элементы равны elements_not_used = [item for item in my_list if item not in new_list], и вы можете просто продолжать до len(my_list)<2

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