我有一个形式的结构:
>>> items
[([[0, 1], [2, 20]], 'zz', ''), ([[1, 3], [5, 29], [50, 500]], 'a', 'b')]
Run Code Online (Sandbox Code Playgroud)
每个元组中的第一项是范围列表,我想创建一个生成器,它根据起始索引按升序提供范围.
由于范围列表已按其起始索引排序,因此此操作很简单:它只是一个排序合并.我希望以良好的计算效率来做到这一点,所以我认为隐式跟踪合并状态的一个好方法是简单地弹出具有最小起始索引的元组列表的前面.范围清单.
我可以min()用来获取[0, 1]我想要的第一个,但我如何得到它的索引?
我有这个:
[ min (items[i][0]) for i in range(len(items)) ]
Run Code Online (Sandbox Code Playgroud)
这给了我每个列表中的第一个项目,然后我可以min()通过某种方式,但是一旦任何列表变为空,它就会失败,并且还不清楚如何使用索引pop()而不在列表中查找它.
总结一下:想要构建为我返回的生成器:
([0,1], 'zz', '')
([1,3], 'a', 'b')
([2,20], 'zz', '')
([5,29], 'a', 'b')
([50,500], 'a', 'b')
Run Code Online (Sandbox Code Playgroud)
或者甚至更有效率,我只需要这些数据:
[0, 1, 0, 1, 1]
Run Code Online (Sandbox Code Playgroud)
(我想要采取前面项目的元组的索引)
python ×1