通过理解检查列表项是否在其他2D列表中丢失

时间:2019-02-17 16:31:12

标签: python list 2d list-comprehension

第一个列表包含带有扩展名的文件名:

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

第二个列表包含不带扩展名的文件名。例如:

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

我知道想知道afile中缺少bfile的哪些文件。预期结果应为:

['file3', 'file4']

我想理解这一点。

4 个答案:

答案 0 :(得分:2)

您可以尝试这种简单的列表理解:)

case ADD_STUDENT :
    return { 
        ...state,
        studentList: state.studentList.concat(action.student)
    }

或者更好的是,您只需分配>>> 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

答案 1 :(得分:2)

只需检查bfile的项目是否无法在afile的任何零索引中找到。

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']

答案 2 :(得分:2)

带有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']

答案 3 :(得分:1)

您可以使用设置方法difference()

set(bfiles).difference(i[0] for i in afiles)
# {'file4', 'file3'}