total_files_set = set(total_files)
files_downloaded_set = set(files_downloaded)
files_not_dowloaded_set = total_files_set - files_downloaded_set
list_of_files_not_dowloaded = list(files_not_dowloaded_set)
Или, если вы хотите в одну строку:
list_of_files_not_dowloaded = list(set(total_files) - set(files_downloaded))
Чтобы узнать больше обо всех операциях с использованием наборов, вы можете проверить это здесь
РЕДАКТИРОВАТЬ :
Я пробовал синхронизировать оба метода, используя 2 случайных списка
- Для подмножества с 50 000 элементов и надмножества с 100 000 элементов
timeit.timeit('l = list(set(l1)-set(l2))',
setup='import random; l1 = random.sample(range(1000000), 100000); l2 = random.sample(range(1000000), 50000)',
number = 10)
Выход:
0,39393879500130424
timeit.timeit('l = [item for item in l1 if item not in l2]', \
setup='import random; l1 = random.sample(range(1000000), 10000); l2 = random.sample(range(1000000), 5000)', \
number = 1)
Выход:
98.58012624000003
Если выслучается, уже есть оба набора, вместо того, чтобы преобразовать из списка:
timeit.timeit('l = list(s2-s1)',
setup='import random; s1 = set(random.sample(range(1000000), 100000)); s2 = set(random.sample(range(1000000), 50000))',
number = 10)
Вывод:
0.06160322100004123