Забудьте о том, «как я могу превратить это в понимание списка». Начните с «как я могу упростить это». Если, в конце концов, вы переходите к циклу с одним или двумя предложениями и простым выражением, тогда вы можете рассмотреть возможность превращения этого в понимание списка, но это последний шаг, а не начальная цель.
Большая часть вашего повторения заключается в том, как вы строите style_input_sorted
:
- Установите значение
None
.
- Каждый раз, когда вы получаете значение, если оно
None
, присвойте ему значение
- В противном случае добавьте запятую, а затем добавьте значение.
Вместо того, чтобы начинать с None
, вы можете начать с ""
, а затем сделать это:
if style_input_sorted:
style_input_sorted += ","
style_input_sorted += file
Но, еще проще: то, что вы делаете - это одно и то же str.join
уже знает, как это сделать. Если вы можете создать список строк, а затем просто join
этот список в конце, это будет намного проще:
style_input_sorted = []
if …
for …
style_input_sorted.append(file)
else …
style_input_sorted.append(file)
style_input_sorted = ",".join(style_input_sorted)
Но похоже, что единственное, что вы когда-либо делаете с style_input_sorted
, это все равно разбиваете его обратно в список. Так зачем даже присоединять строку, чтобы разделить ее?
style_input_list = []
if …
for …
style_input_list.append(file)
else …
style_input_list.append(file)
Есть некоторые другие упрощения, которые вы можете сделать, но это самое большое, и оно откроет двери для следующих. Например, теперь, когда вы делаете только одну тривиальную вещь вместо четырех строк кода для допустимых расширений, вы, вероятно, можете избавиться от continue
:
if os.path.isdir(image):
for file in os.listdir(image):
ext = os.path.splitext(file)[1]
if ext.lower() in valid_ext:
style_input_list.append(file)
else:
style_input_list.append(file)
И теперь у нас есть кусок, который мы можем превратить в понимание списка, хотя я бы использовал выражение генератора:
if os.path.isdir(image):
images = (file for file in os.listdir(image)
if os.path.splitext(file)[1].lower() in valid_ext)
style_input_list.extend(images)
else:
style_input_list.append(image)
Но превратить все это в понимание списка будет ужасно безобразно. Вы можете превратить это в выражение с помощью троичного if
и сгладить все в конце, но если у вас есть пять строк кода, это не относится к пониманию. (Конечно, вы можете выделить эти пять строк в функцию, а затем обернуть вызов этой функции в понимание, которое, возможно, стоит сделать.)