Я пытаюсь использовать списки для печати только строк, которые содержат подстроку .pdf.

Вот строка кода, вызывающая синтаксическую ошибку.

list_of_files = [x if ".pdf" in x for x in list_of_files]

Список list_of_files содержит .pdf и .docx файлы для справки. Они собираются с помощью os.listdir.

Этот цикл for работает нормально, но я бы предпочел использовать понимание списка.

for x in list_of_files:
    if ".pdf" in x:
        print(x)

Спасибо за любую помощь!

0
Torin M. 21 Авг 2018 в 19:51

3 ответа

Лучший ответ

Вам не нужно print(x). Просто x выполнит работу.

list_of_files = ['test.pdf','doc.docx','yolo.pdf']
pdfs = [x for x in list_of_files if '.pdf' in x]
print(pdfs)

Выход:

['test.pdf', 'yolo.pdf']

Условие if необходимо указывать после цикла for, если вам нужно отфильтровать свой список (что вы и пытаетесь сделать). Если вам просто нужны условные выражения для проверки элементов, вы можете использовать if with else перед циклом for. if перед циклом обязательно требует else.

pdfs = [x if '.pdf' in x else 'Not pdf' for x in list_of_files]
print(pdfs)
['test.pdf', 'Not pdf', 'yolo.pdf']
1
Xnkr 21 Авг 2018 в 17:06

pdf_files = [x for x in file_list if ".pdf" in x]

Ваше утверждение if должно быть в конце, потому что именно тогда оно оценивается логически. Я не уверен, что оператор if может сработать в начале, я просто не вижу смысла в том, чтобы иметь оператор if перед тем, как развернуть объект списка в отдельные значения.

Как указано в принятом ответе, вы можете иметь, если в начале цикла понимания списка, однако, вам необходимо предоставить оператор else в конце (чтобы поймать всех отставших). В этом случае это не подходит, так как вы хотите включить только значения в новый список, чтобы они содержали .pdf, и отбросить остальные.

1
Swift 21 Авг 2018 в 17:18

print(list(x for x in list_of_files if '.pdf' in x))

1
Higor Rossato 21 Авг 2018 в 16:56
51953394