반복문의 변수는 지역변수인가요 전역 변수인가요?

항상 감사드리고 있습니다. 다음 문제를 풀다가 혼란에 빠졌습니다.
문제 :
1차원의 점들이 주어졌을 때, 그 중 가장 거리가 짧은 것의 쌍을 출력하는 함수를 작성하시오. (단 점들의 배열은 모두 정렬되어있다고 가정한다.)

예를들어 S={1, 3, 4, 8, 13, 17, 20} 이 주어졌다면, 결과값은 (3, 4)가 될 것이다.
'''
def fast(*a):
list(a).sort()
b = [(a[i] , a[i+1]) for i in range(len(a)-1) if a[i+1] - a[i] == min([a[i+1]-a[i] for i in range(len(a)-1)])]
print(b)
fast(1, 3, 4, 8, 13, 17, 20, 21)

'''
이런식으로 만들어서 문제는 풀었는데요..
문제는 3번째 줄이 제가 적으면서도 헷갈렸다는 점입니다.

궁금한점은,
1. for문의 i(변수)는 전역 변수인듯 한데 맞습니까? (혼자 실험 해봄)
2. 전역 변수가 맞다면, for문 안의 for문을을 사용하고, 그때 똑같이 변수를 i로 사용하면 어떤것이 먼저 실행 되는 것입니까?
(위의 코드 3번째줄에서, if 우측의 i와 if 좌측의 i가 동시에 동작하는 것입니까? 아니면 정해진 순서라도..?)

gunpoll823 661

2021년 12월 25일 11:42 오후

목록으로
1개의 답변이 있습니다. 1 / 1 Page

반복문과 상관없이 파이썬 3에서는 list comprehension 안에서 사용된 변수는 외부에서 접근이 불가능합니다.

min([a[i+1]-a[i] for i in range(len(a)-1)])

여기서 사용된 i는 min 함수에 파라미터로 전달된 list comprehension 안에서만 참조됩니다.

박응용

2021년 12월 26일 1:03 오전

감사합니다 ! - gunpoll823님, 2021년 12월 26일 9:45 오전 추천 , 대댓글