Python - Эффективность - Проверить, если список пуст перед вызовом filter ()? - PullRequest
0 голосов
/ 01 октября 2018

У меня есть список файлов, которые мне нужно отфильтровать для файлов приемлемого типа (например, хранить только файлы ".txt").Затем я «делаю вещи» с окончательным списком тогда и только тогда, когда он не пустой.Мой оригинальный код (со списком игрушек) выглядит так:

files = ["file1.txt", "file2.txt", "file3.jpg"]
if files:
    files[:] = filter(check_filetype, files)
    if files:
         # do something with remaining .txt files

Однако мне любопытно, нужен ли первый оператор «если», чтобы проверить, не пуст ли этот список перед фильтрацией.Я проверил, и filter() примет (и вернет) пустой список.

Так что же более эффективно: дополнительная ветвь в первом операторе if или фильтрация пустого списка?Я склоняюсь к удалению первого утверждения «если».

1 Ответ

0 голосов
/ 01 октября 2018

На мой взгляд, вы можете удалить первый оператор if.Обратите внимание, что вы можете просто использовать понимание списка, которое часто считается более Pythonic.По крайней мере, она должна быть более эффективной для больших списков по сравнению с filter + пользовательской функцией:

files = ['file1.txt', 'file2.txt', 'file3.txt']
files = [fn for fn in files if check_filetype(fn)]

if files:
    # do something
...