У меня есть структура формы:
>>> items
[([[0, 1], [2, 20]], 'zz', ''), ([[1, 3], [5, 29], [50, 500]], 'a', 'b')]
Первый элемент в каждом кортеже - это список диапазонов, и я хочу создать генератор, который предоставляет мне диапазоны в порядке возрастания на основе начального индекса.
Поскольку списки диапазонов уже отсортированы по их начальному индексу, эта операция проста: это просто отсортированное слияние. Я надеюсь сделать это с хорошей вычислительной эффективностью, поэтому я думаю, что один хороший способ неявно отслеживать состояние моего слияния состоит в том, чтобы просто выставить переднюю часть списка кортежей, который имеет наименьший начальный индекс в своем список диапазонов.
Я могу использовать min()
для получения [0, 1]
, который является первым, который я хочу, но как мне получить его индекс?
У меня есть это:
[ min (items[i][0]) for i in range(len(items)) ]
который дает мне первый элемент в каждом списке, который я могу затем min()
каким-то образом, но он терпит неудачу, когда какой-либо из списков становится пустым, а также неясно, как заставить индекс использовать pop()
с не просматривая его в списке.
Подводя итог: хочу построить генератор, который возвращает меня:
([0,1], 'zz', '')
([1,3], 'a', 'b')
([2,20], 'zz', '')
([5,29], 'a', 'b')
([50,500], 'a', 'b')
Или даже более эффективно, мне нужны только эти данные:
[0, 1, 0, 1, 1]
(индексы кортежей, которые я хочу взять перед собой)