2. 리스트 할당, 복사
- 할당과 복사는 비슷한 것 같지만 큰 차이점이 있다.
- b=a와 같이 리스트(a)를 다른 변수(b)에 할당하면 리스트가 두 개가 될 것 같지만 실제로 리스트는 하나이다.
>>> a = [0, 0, 0, 0, 0] >>> b = a # 리스트를 다른 변수에 할당 >>> a is b True
- a와 b를 is 연산자로 비교하면 True가 나오므로, 변수의 이름만 다를 뿐 리스트 a와 b는 같은 객체임을 알 수 있다.
- a와 b는 같기 때문에 b[2] = 99 처럼 리스트 b의 요소를 변경하면 리스트 a와 리스트 b에 모두 반영된다.
>>> b[2] = 99 >>> a [0, 0, 99, 0, 0] >>> b [0, 0, 99, 0, 0]
- 리스트 a와 b를 완전히 두 개로 만들려면 copy 메서드로 모든 요소를 복사해야 한다.
- b = a.copy()와 같이 copy를 사용한 뒤 b에 할당해주면 리스트 a의 요소가 모두 b에 복사된다.
>>> a = [0, 0, 0, 0, 0] >>> b = a.copy() # a를 copy해서 b에 할당
- a와 b를 is 연산자로 비교해보면 False가 나오므로 두 리스트는 다른 객체이지만, 복사된 요소는 모두 같아서 ==로 비교하면 True가 나온다.
>>> a is b False >>> a == b True
- 리스트 a와 b는 별개이므로 한쪽의 값을 변경해도 다른 리스트에 영향을 미치지 않아서 리스트 b의 요소를 변경하면 리스트 a는 그대로이고 b만 바뀐다.
>>> b[2] = 99 >>> a [0, 0, 0, 0, 0] >>> b [0, 0, 99, 0, 0]
3. 반복문으로 리스트의 요소를 모두 출력하기
3-1. for 반복문으로 요소 출력하기
- for 반복문은 in 뒤에 리스트를 지정하면 된다.
# for 변수 in 리스트: # 반복할 코드 >>> a = [38, 21, 53, 62, 19] >>> for i in a: # for로 리스트 a의 모든 요소를 출력 ... print(i) ... 38 21 53 62 19
- 'for i in a:' 는 리스트 a에서 요소를 꺼내서 i에 저장하고 꺼낼 때마다 코드를 반복하기 때문에 print로 i를 출력하면 모든 요소를 순서대로 출력할 수 있다.
for i in [38, 21, 53, 62, 19]: print(i)
- 이렇게 in 다음에 리스트를 직접 지정해도 괜찮다.
3-2. 인덱스와 요소를 함께 출력하기
- for 반복문으로 요소를 출력할 때 인덱스도 함께 출력하려면 enumerate를 사용한다.
# for 인덱스, 요소 in enumerate(리스트) >>> a = [38, 21, 53, 62, 19] >>> for index, value in enumerate(a): ... print(index, value) ... 0 38 1 21 2 53 3 62 4 19
- for index, value in enumerate(a):와 같이 enumerate에 리스트를 넣으면 for 반복문에서 인덱스와 요소를 동시에 꺼내 올 수 있다.
- 인덱스를 1부터 출력하고 싶다면 index + 1을 출력하면 된다.
>>> for index, value in enumerate(a): ... print(index + 1, value) ... 1 38 2 21 3 53 4 62 5 19
- 좀 더 파이썬 다운 방법에는 enumerate에 start를 지정해 주는 것이다.
- enumerate(a, start=1)처럼 start에 1을 지정하여 인덱스가 1부터 시작하도록 했고, 이 코드는 enumerate(a, 1)로 줄여 쓸 수도 있다.# for 인덱스, 요소 in enumerate(리스트, start=숫자): >>> for index, value in enumerate(a, start=1): ... print(index, value) ... 1 38 2 21 3 53 4 62 5 19
※ for에 리스트를 지정하면 요소를 바로 가져와서 편리한 것 처럼 for에서 인덱스를 지정하여 요소를 가져올 수도 있다.
이때는 range에 len으로 리스트의 길이(요소 개수)를 구해서 넣어주면 인덱스를 순서대로 만들어줘서 a[i]와 같이 리스트에 인덱스를 지정하여 값을 가져올 수 있다.
>>> a = [38, 21, 53, 62, 19]
>>> for i in range(len(a)):
... print(a[i])
...
38
21
53
62
19
- for i in range(len(a))를 실행하면 i 에는 요소가 아닌 0부터 마지막 인덱스까지 인덱스가 들어간다.
3-2. while 반복문으로 요소 출력하기
- while 반복문으로 리스트의 요소를 출력할 때는 변수 i를 인덱스로 활용한다.
- 먼저 변수 i를 0으로 만들어주고, i < len(a) 처럼 i 가 리스트의 길이(요소 개수) 직전까지만 반복하도록 한다.
>>> a = [38, 21, 53, 62, 19] >>> i = 0 >>> while i < len(a): ... print(a[i]) ... i += 1 ... 38 21 53 62 19
- 리스트의 인덱스는 0부터 시작하고 마지막 인덱스는 리스트의 길이보다 1이 작으므로 < 를 사용한다.
- 만약 i <= len(a) 처럼 <= 을 사용하면 리스트의 범위를 벗어나므로 주의해야 한다.
>>> a = [38, 21, 53, 62, 19] >>> i = 0 >>> while i <= len(a): ... print(a[i]) ... i += 1 ... 38 21 53 62 19 Traceback (most recent call last): File "<stdin>", line 2, in <module> IndexError: list index out of range
- while 반복문 안에서 요소를 출력할 때는 print(a[i])와 같이 리스트의 인덱스 부분에 i 를 지정하여 출력하고, 그 다음에는 i 가 1씩 증가하도록 만든다.
while i < len(a): print(a[i]) i += 1
'Python 코딩도장' 카테고리의 다른 글
파이썬 코딩도장 Unit 22 정리(4) - 리스트 표현식 사용 (0) | 2022.01.21 |
---|---|
파이썬 코딩도장 Unit 22 정리(3) - 리스트(튜플)의 최대/최소값, 합계 (0) | 2022.01.20 |
파이썬 코딩도장 Unit 22 정리(1) : 리스트 조작 (0) | 2022.01.18 |
파이썬 코딩도장 Unit 21 정리 : 터틀 그래픽스 (0) | 2022.01.17 |
파이썬 코딩도장 Unit 20 정리 : FizzBuzz (0) | 2022.01.16 |