학습내용
이중 For문의 특징
•
각각의 반복문을 제어하는 변수가 달라야 한다. (i와 j로 구분)
•
바깥쪽에 있는 반복문이 다음을 넘어가려면 안쪽에 있는 반복문을 모두 수행해야한다.
•
따라서, 안쪽에 있는 반복문은 (바깥쪽 for문 반복 횟수 * 안쪽 for문 반복횟수) 만큼 반복한다.
리스트의 특징
우리는 프로그래밍을 할때 무수히 많은 데이터를 다루어야 한다, 특히 성질과 쓰임새가 비슷한 데이터를 많이 다루게 되는데 이때 분산된 데이터를 한번에 묶는게 리스트다.
리스트는 성질과 쓰임새가 비슷한 데이터를 한번에 묶는 자료형 이다.
인덱싱과 슬라이싱
리스트는 값의 집합이기 때문에 문자의 집합인 문자열에서 인덱싱, 슬라이싱한 것을 동일하게 사용할 수 있습니다.
인덱스는 스퀀스 객체의 각 요소의 순서, 슬라이스는 무엇인가의 일부를 잘라낸다는 뜻으로 시퀀스 객체의 일부를 잘라내는 것
odd = [1, 3, 5, 7, 9]
cafes = ['star', 'bene', 'yoger', 'friends']
A = [1, 5, 'A', 'CC', 'B']
listInList = [[1, 3, 5, 6, 7], cafes, odd, 1, 3, 'Abc']
a = odd[3]
b = cafes[1]
c = A[2]
d = listInList[0][1] #리스트 내 리스트 접근
print(a)
print(b)
print(c)
print(d)
print(a + d, odd[4] * listInList[4]) #숫자 + 숫자 연산 가능
print(b + c) #문자열 + 문자열: 문자열 합하기
출력 결과:
7
bene
A
3
10 27
beneA
Python
복사
•
특징:
1.
문자열 인덱싱과 마찬가지로 가장 앞에 있는 요소부터 0, 1, 2, ... 순차적으로 번호 인덱스를 부여받습니다.
2.
리스트 안의 리스트에 접근하려면 가장 바깥의 리스트의 인덱스에 먼저 접근한 뒤, 리스트 안에 포함된 리스트의 인덱스를 가져옵니다.
3.
인덱싱한 값끼리 연산 또한 가능합니다.
또한 슬라이싱도 가능 합니다.
odd = [1, 3, 5, 7, 9]
cafes = ['star', 'bene', 'yoger', 'friends']
A = [1, 5, 'A', 'CC', 'B']
listInList = [[1, 3, 5, 6, 7], cafes, odd, 1, 3, 'Abc']
a = odd[1:5]
b = cafes[1:]
c = A[:2]
d = listInList[0][1:4] #리스트 내 리스트 접근
print(a)
print(b)
print(c)
print(d)
출력 결과:
[3, 5, 7, 9]
['bene', 'yoger', 'friends']
[1, 5]
[3, 5, 6]
Python
복사
마이너스 인덱스
•
인덱스 -1은 리스트의 마지막 항목을 가리키며, -2는 마지막 항목의 바로 앞 항목을 가리킵니다.
1. 문자열 슬라이싱과 마찬가지로 앞쪽 범위 값을 생략했다면 가장 작은 인덱스 값을, 혹은 뒤쪽 범위 값을 생략했다면 가장 큰 인덱스 값을 자동으로 가져와 슬라이싱합니다.
2. 리스트 안의 리스트를 슬라이싱하고 싶다면 먼저 리스트 안에 있는 리스트를 인덱싱한 다음 원하는 범위를 작성하여 슬라이싱합니다.
list = [25, 36, 8, 53, 24, 56]
print(list[-1])
print(list[-2])
print(list[-3])
print(list[-4])
print(list[-5])
print(list[-6])
56
24
53
8
36
25
Python
복사
이런식으로 뒤에 있는 값도 출력 할수 있다.
리스트 데이터 삽입과 삭제
리스트에 삽입하는 위치를 지정해서 값을 추가할려면 리스트이름.insert(위치,값) 으로 삽입할수있습니다.
a = [10, 20, 30, 40, 50]
a.insert(2, 25) #2번 위치에 25를 삽입함
print(a)
출력 결과:
[10, 20, 25, 30, 40, 50]
Python
복사
위 코드와 같이 2번째 위치에 25가 삽입된 것을 볼 수 있습니다.
리스트 데이터를 삭제
리스트 데이터를 삭제 할려면 다양한 방법이 있는데
del 리스트이름[인덱스]
리스트이름.pop(인덱스)
또는 값을 지정해서 삭제 할려면
리스트이름.remove(값)
모든 요소를 제거 할려면
리스트이름.clear()
를 하면 됩니다.
리스트 대입
date1 = [1, 2, 3, 4, 5]
date2 = date1
Python
복사
이 대입으로 리스트가 2개가 된 것은 아닙니다. 아래의 코드를 실행시켜 봅시다.
date1 = [1, 2, 3, 4, 5]
date2 = date1
print("date1은 ", date1)
print("date2은 ", date2)
date1[0] = 10
print("date1 변경 후")
print("date1은 ", date1)
print("date2은 ", date2)
출력 결과:
date1은 [1, 2, 3, 4, 5]
date2은 [1, 2, 3, 4, 5]
date1 변경 후
date1은 [10, 2, 3, 4, 5]
date2은 [10, 2, 3, 4, 5]
Python
복사
date1을 변경하면 date2 또한 변경됩니다.
리스트를 나타내는 변수에 대입을 하면, 2개의 변수가 같은 하나의 리스트를 나타내게 됩니다.
새로운 리스트를 사용할려면 어떻게 해야되나
방법1. list(리스트명) 사용하기
date1 = [1, 2, 3, 4, 5]
date2 = list(date1)
print("date1은 ", date1)
print("date2은 ", date2)
date1[0] = 10
print("date1 변경 후")
print("date1은 ", date1)
print("date2은 ", date2)
출력 결과:
date1은 [1, 2, 3, 4, 5]
date2은 [1, 2, 3, 4, 5]
date1 변경 후
date1은 [10, 2, 3, 4, 5]
date2은 [1, 2, 3, 4, 5]
Python
복사
방법2. 리스트명.copy() 사용하기
date1 = [1, 2, 3, 4, 5]
date2 = date1.copy()
print("date1은 ", date1)
print("date2은 ", date2)
date1[0] = 10
print("date1 변경 후")
print("date1은 ", date1)
print("date2은 ", date2)
출력 결과:
date1은 [1, 2, 3, 4, 5]
date2은 [1, 2, 3, 4, 5]
date1 변경 후
date1은 [10, 2, 3, 4, 5]
date2은 [1, 2, 3, 4, 5]
Python
복사
리스트 집계
•
숫자형 관련
1. max(리스트명) 리스트 내의 최대값을 구한다.
2. min(리스트명) 리스트 내의 최소값을 구한다.
3. sum(리스트명) 리스트 내부의 값을 모두 더한다.
a = [50, 76, 98, 32, 12, 64]
print("최대값 :", max(a))
print("최소값 :", min(a))
print("합계 :", sum(a))
출력 결과:
최대값 : 98
최소값 : 12
합계 : 332
Python
복사
•
리스트 정렬
1. sorted(리스트명) 리스트 내부의 값을 오름차순 정렬한다.
(순서형변수의 element값을 정렬하고 새로운 리스트로 반환 해줌. 원본은 변하지 않습니다.)
2. sorted(리스트명, reverse=True) 리스트 내부의 값을 내림차순 정렬한다.
a = [25, 34, 10, 5, 80, 63]
#리스트 내부의 값을 오름차순 정렬한다.
print(sorted(a))
print(a)
#리스트 내부의 값을 내림차순 정렬한다.
print(sorted(a, reverse=True))
print(a)
[5, 10, 25, 34, 63, 80]
[25, 34, 10, 5, 80, 63]
[80, 63, 34, 25, 10, 5]
[25, 34, 10, 5, 80, 63]
Python
복사
어려웠던점
똑같은 리스트를 2개 만들려고 할때
a = [1,2,3,4]
b = a
Python
복사
이런식으로 하고 a를 수정했는데 b도 같이 수정되는 오류?가 발생하였다.
다른 언어는 이게 되었지만 파이썬은 안되었다.
해결 방법
a = [1,2,3,4]
b = a.copy()
Python
복사
수업 시간에 배운 리스트.copy() 함수를 통해 해결 하였다.
왜냐하면 .copy() 함수를 사용하면 새로운 메모리 공간이 생성되서 거기에 저장되기 때문이다