Проверьте, отсутствует ли элемент списка в другом 2D-списке с пониманием - PullRequest
0 голосов
/ 17 февраля 2019

Первый список содержит имена файлов с расширениями:

afiles = [['file1', '.exe'], ['file2', '.txt']]

Второй список содержит имена файлов без расширения.Например:

bfiles = ['file1', 'file2', 'file3', 'file4']

Я знаю, хочу знать, какие файлы bfiles отсутствуют в файлах.Ожидаемый результат должен быть:

['file3', 'file4']

Я хотел бы понять это с пониманием.

Ответы [ 4 ]

0 голосов
/ 17 февраля 2019

Вы можете использовать метод установки difference():

set(bfiles).difference(i[0] for i in afiles)
# {'file4', 'file3'}
0 голосов
/ 17 февраля 2019

Просто проверьте, не удалось ли найти элементы bfiles в нулевых индексах в файлах.

afiles = [['file1', '.exe'], ['file2', '.txt']]
bfiles = ['file1', 'file2', 'file3', 'file4']

result = [file for file in bfiles if not any(file == afile[0] for afile in afiles)]
['file3', 'file4']
0 голосов
/ 17 февраля 2019

Список-понимание с itertools.chain:

from itertools import chain

afiles = [['file1', '.exe'], ['file2', '.txt']]
bfiles = ['file1', 'file2', 'file3', 'file4']

print([x for x in bfiles if x not in chain.from_iterable(afiles)])
# ['file3', 'file4']
0 голосов
/ 17 февраля 2019

Вы можете просто попробовать это простое понимание списка:)

>>> afiles = [['file1', '.exe'], ['file2', '.txt']]
>>> bfiles = ['file1', 'file2', 'file3', 'file4']
>>> [x for x in bfiles if x not in (y[0] for y in afiles)]
['file3', 'file4']

или лучше, вы можете просто назначить afiles файлы без расширений, например,

>>> afiles_names = [x[0] for x in afiles]
>>> [x for x in bfiles if x not in afiles_names] # so you won't have to compute that each time
['file3', 'file4']
...