比较嵌套列表中的前两个元素是否等于python中的比较列表

问题描述 投票:-1回答:2

在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。

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

提前致谢,

python nested-lists
2个回答
2
投票

由于你有一个巨大的列表,为了避免每次迭代整个事情 - 每次搜索的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 

0
投票

我不认为你可以避免列表上的循环。即使你不自己运行循环并假设有一个内置函数,我不知道并且可以做你要求的,我很确定它会在后台循环列表。所以我建议使用一行代码,包括一个循环,显然。

(4,5,11,11,11)[:2] in [i[:2] for i in big_list]
© www.soinside.com 2019 - 2024. All rights reserved.