당신이보고 한 오류는 nums
이 빈 목록 일 때만 발생할 수 있다고 생각합니다. 이 경우 nums[len(nums) - 1]
은 유효한 인덱스가 아닙니다 (빈 목록에 유효한 인덱스가 없기 때문에).
이 문제의 경우 목록의 마지막 두 항목을 특수하게 처리하는 것이 중요하지 않습니다. 목록의 길이가 2보다 작은 경우, 댓글이 말한다
def has22(nums):
for n in range(len(nums) - 1): # the loop body will not run if len(nums) < 2
if nums[n] == nums[n + 1] == 2: # you can chain comparison operators
return True
return False # this is at top level (after the loop), not an `else` clause of the if
, 나는이 목록 인덱스를 사용하는 루프 본문이 실행되지 않습니다 : 당신은 하나 개의 루프 모든 경우를 처리하여 코드를 훨씬 간단하게 만들 수 있습니다 range
이 비어 있고 빈 시퀀스를 반복하면 아무것도 수행되지 않기 때문입니다.
num
의 두 반복자에서 zip
을 사용하는 것이 약간 더 편리 할 수 있습니다.이 반복자는 한 자리 씩 옵셋됩니다.
def has22_fancy(nums):
iters = [iter(nums), iter(nums)]
next(iters[1], None)
return any(a == b == 2 for a, b in zip(*iters))
이 접근 방식을이 주어진 년대 itertools
documentation, 영감 zip
을 사용하여 쌍을 반복하기 : 당신은 아직 그것을 이해하지 않는 경우에, 그것에 대해 너무 많이 걱정하지 않도록 이것은 고급 파이썬 물건 pairwise
레시피 :
def pairwise(iterable):
"s -> (s0,s1), (s1,s2), (s2, s3), ..."
a, b = tee(iterable)
next(b, None)
return zip(a, b)
전체 오류를 붙여주세요. – Bharel