首页 > 解决方案 > 比较嵌套列表中的前两个元素是否等于python中的比较列表

问题描述

在 python 2.7 中,我想在比较时验证元素的子集列表是否包含在更长的嵌套列表中,比如只说前两个元素。

假设我们有一个嵌套元素的大列表(这个 big_list 将有超过 10k 个元素,因此每次比较的循环非常低效,我想避免这种情况)。对于这个例子,假设我们在 big_list 中只有 4 个嵌套列表:

`
big_list = ((2,3,5,6,7), (4,5,6,7,8), (6,7,8,8), (8,4,2,7))
`

如果我有一个列表,比方说(4,5,11,11,11),我正在寻找一个与 big_list 相比将返回 True 的操作,因为 big_list 中的第二个列表以 (4,5,...) 开头并匹配我的 single_list 的前两个元素. 本质上,我想知道单个列表的前两个元素(例如(4,5,11,11,11))是否在我的大列表中重复,而不管其他后续数字(例如 11,11,...) .

如果另一个 single_list(例如(4,8,11,11,11))与 big_list 中的前两个元素不匹配,我的操作也应该返回 False。

我希望这更清楚。有什么帮助吗?

提前致谢,

标签: pythonnested-lists

解决方案


由于您有一个巨大的列表,为了避免每次都迭代整个事物 - 每次搜索的 O(n) 时间复杂度,您可以使用集合进行恒定时间查找。

tup_truth_set = set([tup[:2] for tup in big_list]) # set with first two letters of interest

那么你只需做这样的事情来检查恒定时间:

tuple_of_interest[:2] in tup_truth_set 

推荐阅读