Wpis z mikrobloga

mireczki z #programowanie i #python

Problem:
mam tablice w której mogą byc wartosci od 0 do 51
chciałbym sprawdzić czy conajmniej 5 z tych wartości należy do któregoś z przedziałów [0:12], [13:25], [26:38] lub [39:51]

oczywiscie tablica posortowana

Czy da sie to zrobić bez uzycia pętli czy tylko forem leciec po kolejnych elementach?

próbowałem za pomocą:
tablica = [0, 1, 2, 3, 4, 22, 23]

tablica[0:5] in range(0:12) - nie zadziałało i wywaliło false
  • 8
@SteveStifler:

tablica = [0, 1, 2, 3, 4, 22, 23]
aRange = range(0,12)
isInRange = sum( [ int( i ) in aRange for i in tablica ] ) >= 5
print( isInRange )

Tylko, że to też jest for 'under the hood'. Jak chcesz to jakoś super zaimplementować (np. dla dużych szybkości lub dużych rozmiarów) to może jakieś sortowanie bąbelkowe lub drzewem binarnym (zakładając, że tablica jest posortowana)
@kostur86: @SteveStifler: dla dobrych prędkości/dużych list jesli nie chce się używać pętli to de facto wystarczy użyć generatora (np filter()), dzięki temu można wykonać szukanie też na nieposortowanym zbiorze i tylko tak długo, aż nie zostanie znaleziony piąty pasujący element - czyli optymistycznie złożoność jest stała o(1) - wykona 5 sprawdzeń, pesymistycznie wykona o(n) sprawdzeń - tutaj jednak złożoność dla posortowanej tablicy nie ulega znaczącej poprawie, chyba żeby połączyć to