我有一份清单清单.使用itertools,我基本上在做
产品结果([A,B],[C,D],[E,F,G]):#test每个结果
结果是所需的产品,每个结果包含每个列表中的一个元素.我的代码逐个元素地测试每个结果,寻找第一个(和最好的)'好'的结果.可以测试非常大的数字.
假设我正在测试第一个结果'ACE'.让我们说当我测试第二个元素'C'时,我发现'ACE'是一个糟糕的结果.无需测试'ACF'或'ACG'.我想直接从失败的ACE跳过尝试ADE.无论如何要做到这一点,而不只是把不必要的结果扔在地板上?
如果我用嵌套for循环实现这个,我会尝试操作循环内的for循环索引,这不会很好......但我确实想跳过测试很多结果.我可以在itertools中有效跳过吗?
在python 3之前,我使用bisect将用户定义的对象插入到列表中.bisect对此很满意,因为我的用户定义对象有一个__cmp__定义如何比较对象的def .我已经阅读了在python 3中不支持cmp的理由,我对此很好.我认为我的旧代码的修复方法是通过将其转换为元组来"装饰"我的用户定义对象
(integer, user-defined object).
Run Code Online (Sandbox Code Playgroud)
但是,如果我有一个我的元组列表,并尝试...
i = bisect_left([list_of_tuples], (integer, user-defined object))
Run Code Online (Sandbox Code Playgroud)
然后我收到错误"builtins.TypeError:unorderable types ..."
那么,(在python 3中)我如何使用bisect作为完全不具有自然排序顺序的项目列表?