2016-08-31 3 views
0

목록에서 첫 번째 누락 된 번호를 찾아야합니다. 누락 된 번호가없는 경우 다음 번호는 마지막 +1이어야합니다.Python : 순서가 지정된 목록에서 양의 정수가 누락 된 것을 찾음

그것은 먼저 첫 번째 숫자는> 1 있는지 확인해야하고, 그럼 경우 새로운 번호는 1 여기

내가 뭘하려해야한다. 문제는 여기에 있습니다 : if next_value - items > 1: 결과가 오류로 끝나고 처음에는 None입니다.

list = [1,2,5] 
vlans3=list 

for items in vlans3: 
    if items in vlans3: 

     index = vlans3.index(items) 
     previous_value = vlans3[index-1] if index -1 > -1 else None 
     next_value = vlans3[index+1] if index + 1 < len(vlans3) else None 
     first = vlans3[0] 
     last = vlans3[-1] 

       #print ("index: ", index) 
     print ("prev item:", previous_value) 
     print ("-cur item:", items) 
     print ("nxt item:", next_value) 

     #print ("_free: ", _free) 
     #print ("...") 
     if next_value - items > 1: 
      _free = previous_value + 1 
      print ("free: ",_free) 
      break 

print ("**************") 
print ("first item:", first) 
print ("last item:", last) 
print ("**************") 

다른 방법으로서 올바른 개수

L = vlans3 

free = ([x + 1 for x, y in zip(L[:-1], L[1:]) if y - x > 1][0]) 

결과 공백 왼쪽 에러가 발생하지 않는 경우가 숫자의 간격이지만, 경우 : IndexError: list index out of range. 그러나 여유 ​​공간이 없으면 새로운 번호 (마지막 +1)를 부여해야한다는 것을 어떻게 든 지정해야합니다. 그러나 아래 코드를 사용하면 오류가 발생하며 이유를 알 수 없습니다.

if free = []: 
    print ("no free") 
else: 
    print ("free: ", free) 
+0

원래 목록에는 정수 만 포함 할 수 있으며 항상 오름차순입니까? – nekomatic

+0

'if next_value - items> 대신에 다음과 같이 코드를 작성하십시오. 1 :'다음을 추가하십시오 :'if next_value! = None and next_value - items> 1 :'작동 할 것입니다. –

+0

@CsabaDobo 무엇을 의미합니까? 첫 번째 숫자가> 1이고, 그렇다면 새 숫자는 1 "이어야합니다. –

답변

0

변수에 예약어 list을 사용하지 마십시오. 두 번째 시도 사용 :이 문제를 신속하고 깔끔하게 피하는 것 외에는 예외입니다.

def free(l): 
    if l == []: return 0 
    if l[0] > 1: return 1 
    if l[-1] - l[0] + 1 == len(l): return l[-1] + 1 
    for i in range(len(l)): 
     try: 
      if l[i+1] - l[i] > 1: break 
     except IndexError: 
      break 
    return l[i] + 1 
1

vlans3의 구성원이 아닌 가장 작은 정수를 얻을 : 당신은 당신의 목록에서 가장 작은 값이 1보다 큰 경우 1을 반환하려면 그러나

ints_list = range(min(vlans3), max(vlans3) + 1) 
missing_list = [x for x in ints_list if x not in vlans3] 
first_missing = min(missing_list) 

, 마지막 값을 + 누락 된 값이 없으면 1이됩니다.

ints_list = [1] + list(range(min(vlan3), max(vlan3) + 2)) 
missing_list = [x for x in ints_list if x not in vlan3] 
first_missing = min(missing_list) 
관련 문제