【发布时间】:2013-11-08 22:58:00
【问题描述】:
作为 SAT 求解器的结果,我有一个逻辑公式模型的大型嵌套 int 列表。 该列表有 100 万个长度约为 30 的子列表。
示例数据:
[[-1, -2, 3, -4, -5, 6, 7, -8, -9, -10, -11, -12, 13, 14, 15, -16, 17, -18, -19, -20, 21, 22, 23, 24, 25, -26, -27, 28, 29, 30, -31, 32, 33, -34, 35, 36, -37], [-1, -2, 3, -4, -5, 6, 7, -8, -9, -10, -11, -12, 13, 14, 15, -16, 17, -18, -19, -20, 21, 22, 23, 24, 25, -26, -27, 28, 29, 30, -31, 32, 33, -34, 35, 36, 37], [-1, -2, 3, -4, -5, 6, 7, -8, -9, -10, -11, -12, 13, 14, 15, -16, 17, -18, -19, -20, 21, 22, 23, 24, 25, -26, -27, 28, 29, 30, -31, 32, 33, 34, 35, 36, -37], [-1, -2, 3, -4, -5, 6, 7, -8, -9, -10, -11, -12, 13, 14, 15, -16, 17, -18, -19, -20, 21, 22, 23, 24, 25, -26, -27, 28, 29, 30, -31, 32, 33, 34, 35, 36, 37], [-1, -2, 3, -4, -5, 6, 7, -8, -9, -10, -11, -12, 13, 14, 15, -16, 17, -18, -19, -20, 21, 22, 23, 24, 25, -26, -27, 28, 29, 30, -31, 32, 33, 34, -35, 36, -37], [-1, -2, 3, -4, -5, 6, 7, -8, -9, -10, -11, -12, 13, 14, 15, -16, 17, -18, -19, -20, 21, 22, 23, 24, 25, -26, -27, 28, 29, 30, -31, 32, 33, 34, -35, 36, 37], [-1, -2, 3, -4, -5, 6, 7, -8, -9, -10, -11, -12, 13, 14, 15, -16, 17, -18, -19, -20, 21, 22, 23, 24, 25, -26, -27, 28, 29, 30, 31, 32, 33, 34, -35, 36, -37], [-1, -2, 3, -4, -5, 6, 7, -8, -9, -10, -11, -12, 13, 14, 15, -16, 17, -18, -19, -20, 21, 22, 23, 24, 25, -26, -27, 28, 29, 30, 31, 32, 33, 34, -35, 36, 37]]
我需要检查一个列表,比如 [4,5,6] 是否包含属于其中一个嵌套列表的元素。
说我的清单是:
[ [5,12,46,4,99,6],[23,66,99,32,77] ]
如果我用
运行我的程序[4,5,6]
它应该返回true
因为我需要使用不同的列表执行 500 次测试,所以我猜问题是性能关键。
这是我的计划:
- 对要检查的列表进行排序
- 对大嵌套列表进行排序
- 总是先比较两个最小的数字(比如我搜索 2 并且子列表以 3 开头,我可以继续下一个子列表)
或者有没有更好的方法,例如使用字典?
(PS:因为我只寻找正数,所以我之前问过this question 以摆脱所有负数。)
【问题讨论】:
-
作为第一步,您应该真正使用 Python
set数据结构,因为成员资格是您需要的标准,而不是任何订购信息。特别是,set.issubset方法可能是一个足够有效的实现来解决您的问题。
标签: python performance list