ko ko ko en en en ko ko cs zh ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko en ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko hbs_lat ko en ko ko ko ko ko ko ko en ko en ko en ko en ko ko ko ko ko en ko ko en ko en ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko fr ko ko ko ko fr ko ko ko en en ko en zh en en
◀ 11.2 시퀀스 객체의 요소 개수 구하기11.4 슬라이스 사용하기 ▶︎
이번에는 시퀀스 객체에 들어있는 요소에 접근하는 방법을 알아보겠습니다. 시퀀스 객체의 각 요소는 순서가 정해져 있으며, 이 순서를 인덱스라고 부릅니다.
다음과 같이 시퀀스 객체에 [ ](대괄호)를 붙이고 [ ] 안에 각 요소의 인덱스를 지정하면 해당 요소에 접근할 수 있습니다.
간단하게 리스트를 만든 뒤 요소를 출력해보겠습니다.
인덱스(index, 색인)는 위치 값을 뜻하는데 국어사전 옆면에 ㄱ, ㄴ, ㄷ으로 표시해 놓은 것과 비슷합니다. 여기서 주의할 점은 시퀀스 객체의 인덱스는 항상 0부터 시작한다는 점입니다(대다수의 프로그래밍 언어는 인덱스가 0부터 시작합니다). 따라서 리스트 a의 첫 번째 요소는 a[0]이 됩니다. 꼭 기억해두세요.
▼ 그림 11-10 인덱스로 리스트의 요소에 접근
튜플, range, 문자열도 [ ]에 인덱스를 지정하면 해당 요소를 가져올 수 있습니다.
다음은 튜플 b의 첫 번째(인덱스 0) 요소를 출력합니다.
▼ 그림 11-11 인덱스로 튜플의 첫 번째 요소에 접근
range도 인덱스로 접근할 수 있습니다. 다음은 range의 세 번째(인덱스 2) 요소를 출력합니다.
▼ 그림 11-12 인덱스로 range 객체의 세 번째 요소에 접근
문자열은 요소가 문자이므로 인덱스로 접근하면 문자가 나옵니다. 다음은 문자열 hello의 여덟 번째 요소를 출력합니다.
▼ 그림 11-13 인덱스로 문자열의 요소에 접근
참고 | 시퀀스 객체에 인덱스를 지정하지 않으면?
시퀀스 객체에 인덱스를 지정하지 않은 상태는 해당 객체 전체를 뜻합니다. 따라서 다음과 같이 리스트 a를 출력하면 [ ]를 포함하여 리스트 전체가 출력됩니다.
시퀀스 객체에서 [ ](대괄호)를 사용하면 실제로는 __getitem__ 메서드를 호출하여 요소를 가져옵니다. 따라서 다음과 같이 __getitem__ 메서드를 직접 호출하여 요소를 가져올 수도 있습니다.
__getitem__ 메서드는 '39.3 인덱스로 접근할 수 있는 이터레이터 만들기'에서 설명하겠습니다.
지금까지 시퀀스 객체에 인덱스를 양수만 지정했습니다. 그러면 인덱스를 음수로 지정하면 어떻게 될까요?
시퀀스 객체에 인덱스를 음수로 지정하면 뒤에서부터 요소에 접근하게 됩니다. 즉, -1은 뒤에서 첫 번째, -5는 뒤에서 다섯 번째 요소입니다. 따라서 a[-1]은 뒤에서 첫 번째 요소인 19, a[-5]는 뒤에서 다섯 번째 요소인 38이 나옵니다.
리스트 a의 양수 인덱스와 음수 인덱스를 그림으로 표현하면 다음과 같은 모양이 됩니다.
▼ 그림 11-14 리스트의 양수 인덱스와 음수 인덱스
튜플, range, 문자열도 음수 인덱스를 지정하면 뒤에서부터 요소에 접근합니다.
다음은 튜플 b의 뒤에서 첫 번째(인덱스 -1) 요소를 출력합니다.
>>> b = (38, 21, 53, 62, 19) >>> b[-1]        # 튜플의 뒤에서 첫 번째(인덱스 -1) 요소 출력 19
▼ 그림 11-15 음수 인덱스로 튜플의 요소에 접근하기
물론 range도 음수 인덱스로 접근할 수 있습니다. 다음은 range의 뒤에서 세 번째(인덱스 -3) 요소를 출력합니다.
>>> r = range(0, 10, 2) >>> r[-3]        # range의 뒤에서 세 번째(인덱스 -3) 요소 출력 4
▼ 그림 11-16 음수 인덱스로 range 객체의 요소에 접근하기
문자열도 음수 인덱스를 지정할 수 있습니다. 다음은 문자열 hello의 뒤에서 네 번째(인덱스 -4) 요소를 출력합니다.
>>> hello = 'Hello, world!' >>> hello[-4]    # 문자열의 뒤에서 네 번째(인덱스 -4) 요소 출력 'r'
▼ 그림 11-17 음수 인덱스로 문자열의 요소에 접근하기
11.3.2  인덱스의 범위를 벗어나면?
시퀀스 객체를 만들면 요소의 개수는 정해져 있죠? 다음과 같이 리스트를 만든 뒤 범위를 벗어난 인덱스에 접근하면 어떻게 될까요?
>>> a = [38, 21, 53, 62, 19] >>> a[5]    # 인덱스 5는 범위를 벗어났으므로 에러 Traceback (most recent call last):   File " ", line 1, in       a[5] IndexError: list index out of range
실행을 해보면 리스트의 인덱스가 범위를 벗어났다는 IndexError가 발생합니다.
리스트 a의 요소 개수는 5개인데 a[5]와 같이 지정하면 리스트의 범위를 벗어나게 되므로 에러가 발생합니다. 왜냐하면 인덱스는 0부터 시작하므로 마지막 요소의 인덱스는 4이기 때문이죠. 즉, 마지막 요소의 인덱스는 시퀀스 객체의 요소 개수보다 1 작습니다. 이 부분은 시퀀스 객체를 사용할 때 자주 틀리는 부분이므로 꼭 기억해두세요.
마찬가지로 튜플, range, 문자열도 범위를 벗어난 인덱스를 지정하면 IndexError가 발생합니다.
11.3.3  마지막 요소에 접근하기
앞에서 시퀀스 객체에 인덱스를 -1로 지정하면 뒤에서 첫 번째 요소에 접근한다고 했죠? 바로 시퀀스 객체의 마지막 요소입니다.
그러면 시퀀스 객체의 마지막 요소에 접근하는 다른 방법은 없을까요? 다음과 같이 len 함수로 리스트의 길이를 구한 뒤 이 길이를 인덱스로 지정해보면 에러가 발생합니다.
>>> a = [38, 21, 53, 62, 19] >>> len(a)    # 리스트의 길이를 구함 5 >>> a[5]      # 리스트의 길이를 인덱스로 지정 Traceback (most recent call last):   File " ", line 1, in       a[5] IndexError: list index out of range
리스트 a의 인덱스는 0부터 4까지이므로 인덱스에 a의 길이 5를 지정하면 인덱스의 범위를 벗어나게 됩니다. 따라서 5가 아닌 4를 지정해야 마지막 문자가 나옵니다.
그럼 조금 응용해서 인덱스에 len을 조합해보겠습니다. 다음과 같이 인덱스에 len(a)를 넣어봅니다.
>>> a[len(a)] Traceback (most recent call last):   File " ", line 1, in       a[len(a)] IndexError: list index out of range
len(a)는 5이므로 인덱스가 범위를 벗어납니다. 이때는 len(a)에서 1을 빼주어야 인덱스가 범위를 벗어나지 않습니다.
>>> a[len(a) - 1]    # 마지막 요소(인덱스 4) 출력 19
마지막 요소 19가 나왔습니다. 즉, len(a) - 1은 4이므로 마지막 문자가 나옵니다. 이 방법은 시퀀스 객체의 마지막 인덱스를 구할 때 종종 사용하는 방법입니다.
11.3.4  요소에 값 할당하기
이제 시퀀스 객체의 요소에 값을 할당하는 방법을 알아보겠습니다. 시퀀스 객체는 [ ]로 요소에 접근한 뒤 =로 값을 할당합니다.
먼저 리스트부터 요소에 값을 할당해보겠습니다.
>>> a = [0, 0, 0, 0, 0]    # 0이 5개 들어있는 리스트 >>> a[0] = 38 >>> a[1] = 21 >>> a[2] = 53 >>> a[3] = 62 >>> a[4] = 19 >>> a [38, 21, 53, 62, 19] >>> a[0] 38 >>> a[4] 19
a[0] = 38처럼 [ ]에 인덱스를 지정한 뒤 값을 할당하면 됩니다. 단, 이때도 범위를 벗어난 인덱스는 지정할 수는 없습니다.
>>> a[5] = 90 Traceback (most recent call last):   File " ", line 1, in       a[5] = 90 IndexError: list assignment index out of range
'10.2 튜플 사용하기'에서 튜플은 안에 저장된 요소를 변경할 수 없다고 했죠? 다음과 같이 튜플의 [ ]에 인덱스를 지정한 뒤 값을 할당하면 에러가 발생합니다.
>>> b = (0, 0, 0, 0, 0) >>> b[0] = 38 Traceback (most recent call last):   File " ", line 1, in       b[0] = 38 TypeError: 'tuple' object does not support item assignment
마찬가지로 range와 문자열도 안에 저장된 요소를 변경할 수 없습니다.
>>> r = range(0, 10, 2) >>> r[0] = 3 Traceback (most recent call last):   File " ", line 1, in       r[0] = 3 TypeError: 'range' object does not support item assignment  >>> hello = 'Hello, world!' >>> hello[0] = 'A' Traceback (most recent call last):   File " ", line 1, in       hello[0] = 'A' TypeError: 'str' object does not support item assignment
즉, 시퀀스 자료형 중에서 튜플, range, 문자열은 읽기 전용입니다.
11.3.5  del로 요소 삭제하기
이번에는 del로 시퀀스 객체의 요소를 삭제해보겠습니다. 요소 삭제는 다음과 같이 del 뒤에 삭제할 요소를 지정해주면 됩니다.
먼저 리스트를 만들고 세 번째 요소(인덱스 2)를 삭제해보겠습니다.
>>> a = [38, 21, 53, 62, 19] >>> del a[2] >>> a [38, 21, 62, 19]
del a[2]와 같이 사용하면 리스트 a의 세 번째 요소(인덱스 2)인 53을 삭제합니다.
리스트와는 달리 튜플은 요소를 삭제할 수 없습니다.
>>> b = (38, 21, 53, 62, 19) >>> del b[2] Traceback (most recent call last):   File " ", line 1, in       del b[2] TypeError: 'tuple' object doesn't support item deletion
마찬가지로 range와 문자열도 안에 저장된 요소를 삭제할 수 없습니다.
>>> r = range(0, 10, 2) >>> del r[2] Traceback (most recent call last):   File " ", line 1, in       del r[2] TypeError: 'range' object doesn't support item deletion  >>> hello = 'Hello, world!' >>> del hello[2] Traceback (most recent call last):   File " ", line 1, in       del hello[2] TypeError: 'str' object doesn't support item deletion
◀ 11.2 시퀀스 객체의 요소 개수 구하기11.4 슬라이스 사용하기 ▶︎
Unit 1. 소프트웨어 교육과 파이썬
Unit 2. 파이썬 설치하기
Unit 3. Hello, world!로 시작하기
Unit 4. 기본 문법 알아보기
Unit 5. 숫자 계산하기
Unit 6. 변수와 입력 사용하기
Unit 7. 출력 방법 알아보기
Unit 8. 불과 비교, 논리 연산자 알아보기
Unit 9. 문자열 사용하기
Unit 10. 리스트와 튜플 사용하기
Unit 11. 시퀀스 자료형 활용하기
11.1 시퀀스 자료형의 공통 기능 사용하기
11.2 시퀀스 객체의 요소 개수 구하기
11.6 연습문제: 최근 3년간 인구 출력하기
11.7 연습문제: 인덱스가 홀수인 요소 출력하기
11.8 심사문제: 리스트의 마지막 부분 삭제하기
11.9 심사문제: 문자열에서 인덱스가 홀수인 문자와 짝수인 문자 연결하기
Unit 12. 딕셔너리 사용하기
Unit 13. if 조건문으로 특정 조건일 때 코드 실행하기
Unit 14. else를 사용하여 두 방향으로 분기하기
Unit 15. elif를 사용하여 여러 방향으로 분기하기
Unit 16. for 반복문으로 Hello, world! 100번 출력하기
Unit 17. while 반복문으로 Hello, world! 100번 출력하기
Unit 18. break, continue로 반복문 제어하기
Unit 19. 계단식으로 별 출력하기
Unit 20. FizzBuzz 문제
Unit 21. 터틀 그래픽스로 그림 그리기
Unit 22. 리스트와 튜플 응용하기
Unit 23. 2차원 리스트 사용하기
Unit 24. 문자열 응용하기
Unit 25. 딕셔너리 응용하기
Unit 26. 세트 사용하기
Unit 27. 파일 사용하기
Unit 28. 회문 판별과 N-gram 만들기
Unit 29. 함수 사용하기
Unit 30. 함수에서 위치 인수와 키워드 인수 사용하기
Unit 31. 함수에서 재귀호출 사용하기
Unit 32. 람다 표현식 사용하기
Unit 33. 클로저 사용하기
Unit 34. 클래스 사용하기
Unit 35. 클래스 속성과 정적, 클래스 메서드 사용하기
Unit 36. 클래스 상속 사용하기
Unit 37. 두 점 사이의 거리 구하기
Unit 38. 예외 처리 사용하기
Unit 39. 이터레이터 사용하기
Unit 40. 제너레이터 사용하기
Unit 41. 코루틴 사용하기
Unit 42. 데코레이터 사용하기
Unit 43. 정규표현식 사용하기
Unit 44. 모듈과 패키지 사용하기
Unit 45. 모듈과 패키지 만들기
Unit 46. 실전예제: 웹의 데이터로 그래프 그리기
C 언어 코딩 도장
- 이 사이트에 실린 모든 내용, 디자인, 이미지, 편집 구성의 저작권은 (주)도서출판 길벗과 지은이에게 있습니다.
- 저작권법에 의해 보호를 받는 저작물이므로 무단 전재와 복제를 금합니다.
- 책의 내용을 복제하여 블로그, 웹사이트 등에 게시할 수 없습니다.
- 링크, SNS 공유는 허용합니다.
서울시 마포구 서교동 월드컵로 10길 56 (서울시 마포구 서교동 467-9)
Copyright © 2016-2021 Coding Dojang