Представьте, что у меня есть список заказов кортежей:
s = [(0,-1), (1,0), (2,-1), (3,0), (4,0), (5,-1), (6,0), (7,-1)]
Учитывая параметр X
, я хочу выбрать все кортежи, у которых первый элемент равен или больше, чем X
, но не включая первый кортеж, который имеет -1 в качестве второго элемента.
Например, если X = 3
, я хочу выбрать список [(3,0), (4,0)]
Одна из моих идей: Получить ключ отсечки с помощью
E = min (x [0] for x in s if (x [0] >= X) and (x [1] == -1) )
Затем выберите элементы с клавишами между X
и E
:
R = [x for x in s if X <= x [0] < E]
Это дает мне то, что я хочу в R, но кажется действительно неэффективным, включая два сканирования таблицы. Я мог бы сделать это в цикле for, отбрасывая кортежи с слишком маленькими ключами и break, когда я нажимаю первый блокирующий кортеж. Но для бегов, как собака, по сравнению с выбором списка.
Есть ли супер-эффективный способ python-esque (2.7)?