2015-02-05 15 views
0
a = [1,1,1,4,4,4,5] 
b = [20150602, 20150603, 20150604, 20150605, 20150606, 20150607,20150608] 
c = zip(a,b) 

output = [] 
for i in range(0, len(c)-1): 
    if c[i][0] == c[i+1][0] and c[i+1][1] - c[i][1] <= 3: 
     output.append(c[i]) 
print output 

이 코드는 조건문을 사용하여 2 개의 목록을 검색합니다. 요소 n == 요소 n + 1이 목록 b에서 AND (요소 n + 1) - (요소 n) < = 3이면 결과를 인쇄합니다. 내가 겪고있는 문제는 인쇄되어야하는 1 개의 요소를 잘라내는 것입니다. (이 코드 즉되지만 출력 목록에 두 번째 APPEND를 참조for 루프 및 조건문을 사용하여 파이썬 목록 검색

[(1, 20150602), (1, 20150603), (1,20150604), (4, 20150605), (4, 20150606), (4, 20150607)]) 
+1

각 "세트"의 세 번째 요소에 대해 다음 요소에 일치하는 'a'가 없으므로 더 이상 조건이 유지되지 않습니다. – tzaman

답변

0

를 출력

[(1, 20150602), (1, 20150603), (4, 20150605), (4, 20150606)] 

출력해야합니다 :)

In [14]: 

a = [1,1,1,4,4,4,5] 
b = [20150602, 20150603, 20150604, 20150605, 20150606, 20150607,20150608] 
c = zip(a,b) 

output = [] 
for i in range(0, len(c)-1): 
    if c[i][0] == c[i+1][0] and c[i+1][1] - c[i][1] <= 3: 
     output.append(c[i]) 
     output.append(c[i+1]) 
    output = sorted(list(set(output))) 
print output 



[(1, 20150602), (1, 20150603), (1, 20150604), (4, 20150605), (4, 20150606), (4, 20150607)] 
+1

이렇게하면 중복이 발생합니다. – tzaman

+0

예, 중복 인쇄 ... 여분의 값을 얻지 만 중복 인쇄도합니다. – fORzoas

+0

답변이 업데이트되었습니다. 목록의 모든 항목이 고유하다고 가정합니다. – Andrew

0
a = [1,1,1,4,4,4,5] 
b = [20150602, 20150603, 20150604, 20150605, 20150606, 20150607,20150608] 
c = zip(a,b) 

output = [] 
for i in range(0, len(c)-1): 
    if c[i][0] == c[i+1][0] and c[i+1][1] - c[i][1] <= 3: 
     output.append(c[i]) 
    elif c[i][0] != c[i+1][0]: 
     print 'equality failed for numbers: %d and %d' % (c[i][0], c[i+1][0]) 
    elif c[i+1][1] - c[i][1] > 3: 
     print 'Subtraction is greater than three for: %d and %d' % (c[i][1], c[i+1][1]) 

print output 

출력 :.

equality failed for numbers: 1 and 4 
equality failed for numbers: 4 and 5 
[(1, 20150602), (1, 20150603), (4, 20150605), (4, 20150606)] 

두 요소가 누락 된 이유는 for 루프에있는 i이 2이면 c[i][0]이 1을 반환 할 것이기 때문입니다. 이제 if 문의이 섹션을 수행하면 c[i][0] == c[i+1][0]이 반환됩니다. c[i][0]이 1을 반환하고 c[i+1][0]이 4를 반환하고 false를 반환하면 서로 평등하지 마십시오. i이 5 일 때도 마찬가지입니다.

+0

나는 이것을 나중에 보게 될 것이다. ..... 그러나이 솔루션은 너무 많은 정보를 출력한다. ..... 실패한 반복에 관한 print 서술이 필요 없다. ....... 또한 거기에는 없다. 목록에서 정수를 비교할 필요가있다. 유일한 요구 사항은 List 1 (n) == List1 (other n) AND List 2 (other n) - List 2 (n) <= 3 – fORzoas

+0

이것은 결코 해결책이 아니지만 원하는 출력을 얻지 못하는 이유를 설명하려고합니다. – Harpal