извлечение числа из списка в Python
[1,2,3,4,6,7,8] как из этого списка вернуть первое непоследовательное число, в данном случае 6 ?
Ответы (3 шт):
Автор решения: nomnoms12
→ Ссылка
Python:
li = [1, 2, 3, 4, 6, 7, 8]
i = li[0]
for x in li:
if x != i:
print(x)
break
i += 1
stdout:
6
Автор решения: passant
→ Ссылка
Да существует 101 способ решения этой задачи. Помимо уже приведеных:
inp=[1,2,3,4,6,7,8]
shab=[i for i in range (inp[0],inp[-1])]
for i in range(len(inp)) :
if inp[i]!=shab[i]:
print (i,inp[i])
break
.
for i in range(1,len(inp)) :
if inp[i]!=inp[i-1]+1:
print (i,inp[i])
break
.
i=0
while i<len(inp):
if inp[i]-shab[i] == 0:
i+=1
else:
break
print(i,inp[i])
Если у вас список точно от 1, то и
for i,e in enumerate(inp):
if i+1!=e:
break
print(i,e)
и даже так:
inp[min(set(shab).difference(set(inp)))-1]
Можно и еще понапридумывать. Но дальше - лень. Выбирайте что понятнее.
Автор решения: Vasyl Kolomiets
→ Ссылка
Оекурсивный вариант делением пополам исслеуемого саблиста:
li = [1,2,3,4,5,6,9,8]
def seecker(list_, start_sublist, end_sublist):
if end_sublist - start_sublist <= 1: return list_[end_sublist]
list_middle_point = start_sublist + (end_sublist - start_sublist)//2
if list_[list_middle_point] == list_middle_point+1:
start_sublist = list_middle_point
else:
end_sublist = list_middle_point
print(list_[list_middle_point], list_middle_point)
return seecker(list_, start_sublist, end_sublist)
Такой вариант будет побыстрее последовательного перебора на больших списках.
Если бы знать, что вся последовательность возрастает, и в конце не бывает "спусков" вниз, можно еще быстрее сделать ....