7장. 구성이 다른 자료 list
7.1. list형
▪ “홍길동”,”강감찬”,”을지문덕”,…. 과 같은 연속적으로 자료값을 쉽 게 저장하고 추가 삭제할 수 있는 방법은 없을까?
▪ 이와 같은 자료값이 있을때 첫번째, 마지막번째 원소를 쉽게 구하는 방법은 없을까?
▪ 이러한 자료값을 크기순으로 손쉽게 정렬하는 방법은?
2
list
3
7.1. list형
▪ list 타입
▪ list 선언 방법
▪ list를 만들 때는 대괄호( [ ] )로 감싸주고 안에 들어가는 원소는 쉼표를 통해 구 분
▪ element들은 어떠한 type도 가능
• 심지어 다른 list도 element가 될 수 있음
▪ Empty list : element를 하나도 갖지 않는 list
• 기호 [ ]
[ ] list 기호
variable_name = [ … ]
[예제 7-1] list의 활용
4
7.1. list형
▪ 변수는 사용되기 전에 반드시 할당되어야 함
[예제 7-1] list의 활용
5
7.1. list형
▪ 변수는 사용되기 전에 반드시 할당되어야 함
7장. 구성이 다른 자료 list
7.2. list의 index
List의 index
7
7.2. list의 index
▪ list의 각 원소들은 list 변수 내에서 index를 통해 개별적으로 다루어 짐
• 주의 : list는 집합과 유사하지만, index를 통해 접근할 수 있다는 점에서 차이가 남
▪ list와 string의 공통점은 index를 가진다는 것
▪ string과 같이 list의 경우에도 index는 element가 배열된 순서를 나타냄
• 항상 ‘0’번째 요소부터 순서가 매겨 짐
▪ list의 index를 활용하여 index에 해당하는 값을 반환 가능
▪ list의 index 구조
• season =[‘spring’, ‘summer’, ‘fall’, winter’]
list_name[index] list에서 index에 해당하는 element값을 반환함
season = [‘spring’, ‘summer’, ‘fall’, ‘winter’]
spring summer fall winter
0 1 2 3
8
[예제 7-2] index를 이용하여 요소에 접근하기
9
7.2. list의 index
[참고]
10
7.2. list의 index
1 2 3 4
-4 -3 -2 -1
0 1 2 3
a
▪ list의 index에 음수 값을 넣을 수도 있음.
• list형인 변수 a=[1, 2, 3, 4]가 주어졌을 때, a[-1]값을 확인해보면 4가 나옴
• index값이 음수로 가더라도 왼쪽으로 한 칸씩 이동 단, list의 길이를 넘어서면 안 됨
• 아래 예제에서는 4칸을 넘을 수 없음
Index 응용 : element에 접근하기
11
7.2. list의 index
▪ index도 연산이 가능함 (단, 나눗셈 연산자는 사용이 불가) –연산 결과는 반드시 정수(integer type)가 되어야 함
[예제 7-3] index 응용 : element에 접근하기1 list_name
[int_a θ int_b]
int_a θ int_b의 연산 결과가 index가 됨 list는 index에 해당하는 element값을 반환함
θ는 연산자를 의미함, θ = {+, - , *, %}
[예제 7-4] index의 연산 응용 : element에 접근하기
12
7.2. list의 index
[예제 7-4] index의 연산 응용 : element에 접근하기
13
7.2. list의 index
14
atom 에서는 이와 같이 작성 한 후 Comm+I를 누른다
▪ String에서 사용했던 방식과 같이 왼쪽의 element가 오른쪽 list에 포함되어 있는지를 판단함
[예제 7-5] list에서의 in과 not in 1
List의 membership : ‘in’ & ‘not in’
15
7.2. list의 index
in list의 element 인가를 결정하는 연산자
not in list의 element가 아닌 element를 결정하는 연산자
List의 membership : ‘in’ & ‘not in’
16
7.2. list의 index
17
를 실행하면
[예제 7-6] list에서의 in과 not in 2
18
7.2. list의 index
[예제 7-6] list에서의 in과 not in 2
19
7.2. list의 index
List 길이 : len()
20
7.2. list의 index
▪ Len()함수는 해당 list의 element 개수를 int type으로 반환한다.
[예제 7-7] list의 element개수 파악하기 1
len(list or list_name) list의 길이(element의 개수)를 반환하는 함수
List 길이 : len()
21
7.2. list의 index
[예제 7-8] list의 element개수 파악하기 2
[실습 7-1] 특정 단어와 element 개수를 조건으로 하는 예제
22
7.2. list의 index
[실습 7-1] 특정 단어와 element 개수를 조건으로 하는 예제
23
7.2. list의 index
[실습 7-1] 특정 단어와 element 개수를 조건으로 하는 예제
24
7.2. list의 index
[퀴즈 7-1]
25
7.2. list의 index
▪ 다음 프로그램의 결과를 예측하여 넣어 보자.
>>>list1 = ['a', 'b', ['c','d'], 1, [2,3], 'e']
>>>len(list1)
( )
>>>['b'] in list1
( )
>>>['c','d'] in list1
( )
>>>'a' in list1 ( )
list 연산
26
7.2. list의 index
list 연산
27
7.2. list의 index
[퀴즈 7-2]
28
7.2. list의 index
▪ 다음과 같이 작성된 프로그램의 빈칸을 채워 넣어라
>>>list_odd = [1,3,5,7,9]
>>>list_even = [2,4,6,8,10]
>>>list_odd[-3]
( )
>>>list_even[1+3]
( )
>>>( )
[1, 3, 5, 7, 9, 2, 4, 6, 8, 10]
>>>( )
[1, 3, 5, 7, 9, 1, 3, 5, 7, 9]
list slice (1/2)
29
7.2. list의 index
▪ list도 slice기법을 사용하여 자를 수 있음
• 4가지의 index 조건으로 나누어 설명
list_name[index1 : index2] index1이상, index2미만인 범위의 부분list를 생성하는 연산 index1값은 포함되고, index2값은 포함되지 않음
list_name[:] 모든 범위의 list를 생성하는 연산
list slice (2/2)
30
7.2. list의 index
list_name[:index2] index2 미만인 범위의 부분list를 생성하는 연산
list_name[index1:] index1 이상 범위의 부분list를 생성하는 연산
[예제 7-11] list slice
31
7.2. list의 index
[예제 7-11] list slice
32
7.2. list의 index
[퀴즈 7-3]
33
7.2. list의 index
▪ 아래의 실행문에 대한 결과가 올바른지 O/X로 표시해보자
>>>list1 = [1,2,3,4,5,6,7,8,9]
>>>list1[:3]
[1, 2, 3] ( )
>>>list1[0:3]
[2, 3] ( )
>>>list1[3:5]
[4, 5] ( )
>>>list1[3:]
[4, 5, 6, 7, 8, 9] ( )
>>>list1[3:999]
[4, 5, 6, 7, 8, 9, 10, ..] ( )
list의 element 대체
34
7.2. list의 index
▪ string과 달리 list는 할당문을 활용하여 element를 교체할 수 있음
[예제 7-12] list element의 갱신
list의 element 대체
35
7.2. list의 index
list의 element 대체
36
7.2. list의 index
▪ slice와 함께 사용해 element를 교체하는 것도 가능함
list_name[index1 : index2]=
[element1, element2, …] list에서 [index1:index2]의 범위에 해당하는 element들을 [element1, element2, …]로 교체함
list_name[index1:]=
[element1, element2, …]
list에서 index1이상의 범위에 해당하는 모든 element들을 [element1, element2, …]로 교체함
list_name[:index2]=
[element1, element2, …]
list에서 index2 미만의 범위에 해당하는 모든 element들을 [element1, element2, …]로 교체함
[예제 7-13] list element의 갱신
37
7.2. list의 index
[예제 7-13] list element의 갱신
38
7.2. list의 index
[실습 7-2] list 연산 및 대체 slice 활용
39
7.2. list의 index
[퀴즈 7-4]
40
7.2. list의 index
▪ 다음 결과에 알맞도록 빈칸에 알맞은 값을 채워 보자
>>>string = ['a', 'b', 'c', 'd', 'e', 'f']
>>>( ) ['a', 'b', 'c']
>>>( ) ['c', 'd', 'e']
>>>( ) ['b', 'c']
1. 다음 실행문의 결과를 예상하시오.
2. 다음 프로그램의 결과는 무엇인가?
—————————
>>>title = ['P','r','o','g','r','a','m','m','i','n','g']
>>>title [:7]
---
[연습문제]
41
7.2. list의 index
list1 = ['n', 'e', 'w', 'l', 'i', 's', 't']
list2 = ['n', 'e', 'w', 's', 't', 'r', 'i', 'n', 'g']
list_new = list1[:3] + list2[6:]
print(list_new)