通过理解检查其他二维列表中是否缺少列表项
Check if item of list is missing in other 2D list with comprehension
第一个列表包含带扩展名的文件名:
afiles = [['file1', '.exe'], ['file2', '.txt']]
第二个列表包含没有扩展名的文件名。例如:
bfiles = ['file1', 'file2', 'file3', 'file4']
我知道想知道a文件中缺少哪些b文件。预期结果应该是:
['file3', 'file4']
我想理解这一点。
你可以试试这个简单的列表理解:)
>>> 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']
只检查是否在 afiles 的任何零索引中找不到 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']
列表理解 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']
您可以使用设置方法difference()
:
set(bfiles).difference(i[0] for i in afiles)
# {'file4', 'file3'}
第一个列表包含带扩展名的文件名:
afiles = [['file1', '.exe'], ['file2', '.txt']]
第二个列表包含没有扩展名的文件名。例如:
bfiles = ['file1', 'file2', 'file3', 'file4']
我知道想知道a文件中缺少哪些b文件。预期结果应该是:
['file3', 'file4']
我想理解这一点。
你可以试试这个简单的列表理解:)
>>> 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']
只检查是否在 afiles 的任何零索引中找不到 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']
列表理解 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']
您可以使用设置方法difference()
:
set(bfiles).difference(i[0] for i in afiles)
# {'file4', 'file3'}