我有两个已处理文件的列表(A,B)。列表A包含所有初始文件,列表B包含所有已成功处理的文件(因此第二个列表(B)是第一个列表的子集)。
A包含231453个项目。
B包含124769个项目。
我想减去它们以查看哪些文件没有得到处理。 (C应包含106684个项目)
为此,我正在使用 set :
newlist=[]
newlist2=[]
newlist3=[]
newlist=( set(A) - ( set(A) & set(B) ) )
newlist2=(set(A)^set(B))
newlist3=(set(A) - set(B))
print len(newlist)
print len(newlist2)
print len(newlist3)
结果是:
134173
161662
134173
为什么有比预期更多的物品?
答案 0 :(得分:0)
您已指定A和B为列表。列表中可能存在重复项,这些重复项在转换为set时会丢失。
集合是无序且无索引的集合。在Python集中 用大括号括起来。
您可以的话
not_processed = filter(lambda x: x in A, B)
OR
not_processed = [x for x in A if x in B]
如果X值位于B中,则上面的代码将使A中存在的所有x值均变
答案 1 :(得分:0)
您的B包含一些不在A中的项目,如果B是A的子集,则所有三个长度都应该相同。您的对称异形的长度较大,因此您的B包含某些不在A中的项目