ich hab hier eine liste, und wollte wissen wie ich am schnellsten eine Lücke finde. zB:
Code: Alles auswählen
li = [1,2,3,5,12]
Code: Alles auswählen
li = [1,2,3,4,5,12]
danke
uphill
Code: Alles auswählen
li = [1,2,3,5,12]
Code: Alles auswählen
li = [1,2,3,4,5,12]
Code: Alles auswählen
[first for first, second in enumerate(li) if first+1 != second][0] + 1
Code: Alles auswählen
(first for first, second in enumerate(li) if first+1 != second).next() + 1
Code: Alles auswählen
def find_spaces(iterable):
last = None
for item in iterable:
if last is not None and last + 1 != item:
yield last
last = item
Code: Alles auswählen
def find_gap(list):
first = list[0]
step = len(list)
pos = step/2
while True:
step /= 2
if pos >= len(list):
pos = len(list)-1
if list[pos] != first + pos:
if step == 0:
return pos
pos -= step
else:
pos += step
if step == 0:
return False
Code: Alles auswählen
[first for first, second in enumerate(li) if first+1 != second][0] + 1
Code: Alles auswählen
In [12]: li = [0,1,2,12,23,43,255]
In [13]: [first for first, second in enumerate(li) if first+1 != second][0] + 1
Out[13]: 1
Bitte Augen etwas nach links drehen, und dort meinen Nick korrekt ablesen. Dankeschön.uphill hat geschrieben:@linduas das geht nicht mit 0
Code: Alles auswählen
from itertools import count, groupby, imap, izip
from operator import itemgetter
def search_first_gap(iterable):
dummy, before_gap = groupby(izip(iterable, count()),
key=lambda (a, b): a - b).next()
return max(imap(itemgetter(0), before_gap)) + 1
def main():
data = [0, 1, 2, 3, 4, 5, 12]
print search_first_gap(data)
Code: Alles auswählen
def find_spaces(iterable):
last = None
for item in iterable:
if last is not None and last + 1 != item:
yield last+1
last = item