Wyobraź sobie, że mam listę zamówień krotek:Wybór listy zatrzymania?
s = [(0,-1), (1,0), (2,-1), (3,0), (4,0), (5,-1), (6,0), (7,-1)]
Biorąc pod uwagę parametr X
, chcę zaznaczyć wszystkie krotki, które mają pierwszy element równy lub większy niż X
aż do, lecz nie licząc pierwszego krotki że ma -1 jako drugi element.
Na przykład, jeśli X = 3
, chcę wybrać listę [(3,0), (4,0)]
jeden pomysł miałem to: Zdobądź klucz odcięcia z
E = min (x [0] for x in s if (x [0] >= X) and (x [1] == -1))
Następnie wybierz elementy z kluczami między X
i E
:
R = [x for x in s if X <= x [0] < E]
To daje mi to, co chcę w R, ale wygląda na to, że jest prawdziwe nieefektywne, obejmujące dwa skany tabel. Mógłbym to zrobić w pętli for, odrzucając krotki z kluczami zbyt małymi i zrywając, kiedy uderzę w pierwszą blokującą krotkę. Ale do biegania jak pies w porównaniu do wyboru listy.
Czy istnieje super-wydajny, python-esque (2.7) sposób robienia tego?
odpowiedź elegancko spełnia wszelkie moje obawy. Płaczę z radości. –