Как перебрать элементы списка с определенной последовательностью?
Есть список:
first_list = [1,2,3,4,5,6,7,8,9]
Как получить вариации типа:
new_list_1 = [1,2,3]
new_list_2 = [2,3,4]
new_list_3 = [3,4,5]
Т.е. нужно, в новом списке, первый элемент удалить и добавить следующий из основного списка. Желательно через генератор сделать.
В реальном рабочем списке элементов = 1000+
Ответы (2 шт):
Автор решения: hedgehogues
→ Ссылка
Вы можете создать цикл и использовать генератор списка, чтобы создать новый список, каждый раз пропуская первый элемент и добавляя следующий:
first_list = [1,2,3,4,5,6,7,8,9]
new_lists = []
for i in range(len(first_list)-2):
new_list = [first_list[i], first_list[i+1], first_list[i+2]]
new_lists.append(new_list)
print(new_lists)
Вывод:
[[1, 2, 3], [2, 3, 4], [3, 4, 5], [4, 5, 6], [5, 6, 7], [6, 7, 8], [7, 8, 9]]
Вы можете использовать срезы (slicing) списка, чтобы создать эти новые списки, не указывая конкретные индексы элементов. Например:
first_list = [1,2,3,4,5,6,7,8,9]
new_lists = []
for i in range(len(first_list)-2):
new_lists.append(first_list[i:i+3])
print(new_lists)
Результат:
[[1, 2, 3], [2, 3, 4], [3, 4, 5], [4, 5, 6], [5, 6, 7], [6, 7, 8], [7, 8, 9]]
Вы также можете использовать генератор списка и срезы списка, чтобы создать эти новые списки:
first_list = [1,2,3,4,5,6,7,8,9]
new_lists = [first_list[i:i+3] for i in range(len(first_list)-2)]
print(new_lists)
Вывод:
[[1, 2, 3], [2, 3, 4], [3, 4, 5], [4, 5, 6], [5, 6, 7], [6, 7, 8], [7, 8, 9]]
Автор решения: Алексей Р
→ Ссылка
С генератором
first_list = [1, 2, 3, 4, 5, 6, 7, 8, 9]
def gen_lists(lst):
idx = 0
while idx < len(lst) - 2:
yield lst[idx:idx + 3]
idx += 1
gen = gen_lists(first_list)
new_list_1 = next(gen)
new_list_2 = next(gen)
new_list_3 = next(gen)
print(new_list_1, new_list_2, new_list_3, sep='\n')
[1, 2, 3]
[2, 3, 4]
[3, 4, 5]