Больше похоже на просмотр кода, чем на переполнение стека.
Когда вы достигнете последнего элемента в строке for image, img in enumerate(img_files_list)
, после последнего элемента нет элемента.Вот что вызывает IndexOutOfRangeException
.
. Есть несколько способов приблизиться к этому:
Как писал Срути В., включите условие:
print(img_files_list[i])
if i + 1 < len(img_files_list):
print(img_files_list[i + 1])
if i + 2 < len(img_files_list):
print(img_files_list[i + 2])
Включить try... except
:
try:
print(img_files_list[i])
print(img_files_list[i + 1])
print(img_files_list[i + 2])
except IndexOutOfRangeException:
pass
Ограничить диапазон вашей петли:
i_img = list(enumerate(['a', 'b', 'c', 'd', 'e']))
for i, img in i_img [:len(i_img ) - 2]:
print(img)
print(i_img[i + 1])
print(i_img[i + 2])
Обратите внимание, что у вас нет причин использовать enumerate
- вы просто используете его для получения индексов.Вам также не нужен ваш if img in new_list
- вы просто используете его, чтобы пропустить следующие два.Вы можете сделать это более элегантно и решить свою проблему, используя диапазон (модифицированное решение 3).
imgs = os.listdir('/path/to/directory')
triplets = []
for i in range(0, len(imgs) - 2, 3):
triplet = [imgs[i], imgs[i + 1], imgs[i + 2]]
triplets.extend(triplet)
print('\n'.join(triplet))
NB Я не уверен, что вы даже пытаетесь сделать.Даже ваш if img in new_list
может быть ошибкой, поскольку он пропускает последние 1-2 последних пункта.И если этого не будет, все, что вы будете делать, это сделать копию этого списка и распечатать его содержимое.В этом случае я бы предложил:
imgs = os.listdir('/path/to/directory')
print('\n'.join(imgs))
Но если вы уточните, что вы пытаетесь сделать, я могу отредактировать этот ответ.