Функция добавления не может выйти из цикла for - PullRequest
1 голос
/ 24 октября 2019

Я хочу добавить файлы, но записная книжка Юпитера просто говорит, что файл запущен, но не выдает код ошибки и никогда не выводит. Когда я пытаюсь остановить ноутбук, он просто падает. Это проблема с моим ноутбуком или функцией?

Я пробовал свой код на очень простом коде, таком как:

x = [1, 2, 3, 4, 5]

for i in x:
    x.append(i)
print(x)

... но вывод никогда не предоставляется.

Это мой действительный код:

jpgfiles = [f for f in glob.glob(path + "**/*.jpg", recursive=True)]
pngfiles = [f for f in glob.glob(path + "**/*.png", recursive=True)]

for j in jpgfiles:
    jpgfiles.append(j)
    #print(jpgfiles)

for p in pngfiles:
    pngfiles.append(p)
    #print(pngfiles)

all_files = jpg.files + png.files
#print(all_files)

Причина, по которой мне интересно, если это проблема с кодом, заключается в том, что я не знаю, поймал ли я файл в какой-то бесконечный цикл или что-то еще? Следует отметить, что другие разделы действительно сложного кода все еще работают! только когда я прихожу к этой функции, она никогда не перестает работать ...

Ответы [ 2 ]

1 голос
/ 25 октября 2019

Вы можете объединить два списка следующим образом:

jpgfiles = [f for f in glob.glob(path + "**/*.jpg", recursive=True)]
pngfiles = [f for f in glob.glob(path + "**/*.png", recursive=True)]

all_files = [*jpgfiles, *pngfiles]
print(all_files)
0 голосов
/ 24 октября 2019

Если вы добавите

print(x)

в цикл for, вы увидите, что вы создали бесконечный цикл. Вы увеличиваете массив, над которым работаете, и просматриваете сам массив. это обычно очень плохая практика. Вы должны клонировать массив и добавить элементы из первого массива во второй, просматривая первый.

...