比较列表一和列表二的值的最有效方法是返回列表一的子集



我有两个列表列表

trecords = [[1072, 'chickens', 'are', 'messy'], [1073,'chickens', 'eat', 'grass'],...]
srecords = [[1, 'chickens', 'attack', 'lizards'], [12,'chickens', 'eat', 'grass'],...]

我需要比较每个列表的最终值,并返回列表a中不包含在列表b中的数字位。。。生成类似[1072,...]的值列表

以下代码有效:

droplist = []
for trecord in trecords:
if trecord[1::] not in [srecord[1::] for srecord in srecords]:
droplist.append(trecord[0])

如果更快的话,我宁愿有这样的东西:

droplist = [trecord[0] for trecord in trecords if trecords[1::] not in srecords[1::]]

但这在每个值上都是匹配的,我不知道为什么。每个列表的实际长度为300k个值。这是比较它们最快的方法吗?我也把数据放在字典里,数字是键,文本(列表(是值,但这似乎较慢。

这里,我认为您只需要在列表理解\中再增加一个嵌套级别

droplist = [trecord[0] for trecord in trecords if trecord[1:] not in [srecord[1:] for srecord in srecords]]

最新更新