2017-01-12 1 views
-2
v = [1, 3, 5, 6, 8, 10] 

f = [2, 4, 7, 9, 11, 12] 

def new(v,f): 

    i = 0 
    j = 0 
    u=[0]*12 
    for k in range(12): 
      if(v[i]<=f[j]): 
       u[k]+=v[i] 
       i+=1 
      elif(f[j]<=v[i]): 
       u[k]+=f[j] 
       j+=1 
    print(u) 
new(v, f) 

역 추적 (마지막으로 가장 최근 통화) :내가 사용할 때마다 색인이 범위를 벗어났습니다?

파일 "C : /Users/Matheus/PycharmProjects/untitled/dsfdsfs.py", 라인 15,

new(v, f) 

파일 "C에서 : /Users/Matheus/PycharmProjects/untitled/dsfdsfs.py "새로운

if(v[i]<=f[j]): 

IndexError 라인 8 : 범위를 벗어난리스트 인덱스

나는이 오류의 원인을 파악할 수 없다.

+1

: 10, 매번 V [I]는 것이다 <= F [J]와 아웃 어느 것, I를 증가하려고 할 범위의. – chapelo

답변

0

리스트 v와 f의 길이가 모두 6이기 때문에 이러한 현상이 발생한다. 코드가 실행되면 i가 5 이상으로 증가하여 오류가 발생합니다. 당신이 결합하려고하는 것처럼

for k in range(12): 
    try: 
     .... 
    except IndexError as err: 
     print(err) 
     print("i = ", i) 
     print("j = ", j) 
     print("k = ", k) 
+0

감사합니다! 나는 K 범위의 솔루션을 찾고 마침내 이해했습니다. –

0

것 같습니다 : 당신이 for 루프 내에서 try/except 블록을 추가 한 후 I, J의 값을 출력하고 실패를 볼 케이 경우

두 개의 목록을 하나의 정렬 된 목록으로?

이 훨씬 더 빨리했을 것이다 :

sorted(v+f) 
+0

그래, 그렇 겠지. 그러나이 코드는 실제로 테스트에서 비롯되었으며이 질문에는이 메서드가 필요했습니다. 그러나 어쨌든 당신을 감사하십시오. –

1
전 = 5의 경우 문장의 첫 번째 분기가 실행

, 그리고 난 다음 루프에서 6으로 증가, 그것은 V를 비교하려고 [6] ~ f [j]. 그러면 오류가 발생합니다.

필요한 반복 횟수를 알지 못하기 때문에 while 루프를 사용하는 것이 좋습니다. 파이썬의 목록은 변경 가능하기 때문에 .append() 및 .extend() 함수를 사용하여 다른 카운터를 유지하는 대신 배열 끝에 값을 추가하는 것이 훨씬 쉽습니다. 마지막으로, while 루프가 끝나면 어떤 목록이 고갈되었는지 확인하고 루프를 끝내고 끝에 다른리스트를 추가 할 수 있습니다.

예 번호 : V의 마지막 요소 이후

def new(v,f): 

    i = 0 
    j = 0 
    u = [] 
    # Compare values until one of the lists is exhausted 
    while i < len(v) and j < len(f): 
     if(v[i]<=f[j]): 
       u.append(v[i]) 
       i+=1 
     elif(f[j]<=v[i]): 
       u.append(f[j]) 
       j+=1 
    # Check which list was exhausted and add the rest of the other 
    # list on the end of the new list 
    if i >= len(v): 
     u.extend(f[j:]) 
    else: 
     u.extend(v[i:]) 
    print(u) 
관련 문제