23.09.01
표춘입출력함수
input()와 print() 간단하니 넘어가도록하자.
인풋으로 입력받는 그 값의 자료형은 문자형이 된다는 것만 기억해두자
리스트
프로그래밍 언어에서 가장 많이 사용되는 자료형이며 배열(array)이라고도 하는 list에 대해 알아볼 것이다.
한개의 변수에 여러 값을 할당하는 방식을 일반적으로 배열, 파이썬에선 리스트라고 한다.
파이썬에서는 리스트처럼 여러 데이터를 하나의 변수에 할당하는 기법을 시퀀스 자료형이라고 한다. 시퀀스 자료형은 여러 자료를 순서대로 넣는다는 뜻이다. 리스트는 하나의 자료형으로만 저장하지 않고, 정수형이나 실수형 같은 다양한 자료형을 포함할 수 있다. (파이썬에서는 리스트라고 하지만 C나 자바 같은 프로그래밍 언어에서는 배열이라는 표현을 더 많이 사용한다. 물론 파이썬에서도 배열의 개념이 있고 구분하여 사용하지만, 일반적으로 시퀀스 자료형을 처리하기 위해서는 리스트를 더 많이 사용한다.)
인덱싱과 슬라이싱
인덱싱이란 리스트에 있는 값에 접근하기 위해, 이 값의 상대적인 주소(offset)를 사용하는 것이다. 주소는 간단히 말해 첫 번째 값을 0으로 했을 때, 첫 번째 값과 얼마나 떨어져 있는지를 표현한 값으로, 일반적으로 인덱스 값이라고 한다.
코드를 예시로 알아보자
1행은 colors 라는 변수에 red, blue, green 이라는 문자형인 값들이 저장되어있다는 뜻이다.
2행은 colors라는 리스트의 0에 있는, 즉 첫번째 값을 반환, 세번째 값을 반환하라는 뜻이다.
(3행의 len함수는 리스트 안에있는 값의 개수를 반환한다는 뜻이다. 결과로 3이 나온다.)
colors=['red', 'blue', 'green'
인덱스 0 1 2
그냥 보고 이해해라 주소값은 첫번째 값부터 0 1 2 3 4 5 6 으로 시작한다.
왜 주소값이 0부터 시작하냐? 여러 이유가 있다만 0부터 시작하면 이진수관점에서 메모리 절약이 가능하단다
알거없고 그냥 외워라
슬라이싱(slicing)
슬라이싱은 리스트에서 파생된 강력한 기능 중 하나로, 리스트의 인덱스를 사용하여 전체 리스트에서 일부를 잘라내어 반환한다.
결과 값은 무엇일까?
['서울', '부산', '인천', '대구', '대전']
['광주', '울산', '수원']
일반적으로 0부터 5 (1번째~6번째) 까지 출력될 것으로 예상했겠지만 예상과 달리 0부터 4까지의 값만 출력된다.
즉 파이썬의 리스트에서 마지막 인덱스 값은 출력되지 않는다. 정확히는 '마지막 인덱스-1' 까지만 출력된다.
처음 리스트를 접하면 상당히 헷갈리니 유념하도록 하자.
그리고 3행의 코드에서 보면 왜 인덱스를 이렇게 사용하는 쉽게 이해할 수 있다.(지만 난 이해가 안간다)
이 코드처럼 한번 이상의 리스트 변수를 사용하면 마지막 인덱스가 다음 리스트의 시작 인덱스가 되어 코드를 작성할 때 조금 더 쉽게 이해할 수 있다는 장점이 있다.
이해가 가는가? 난 안했다. 그냥 외우도록하자
리버스 인덱스
리스트에서 인덱스를 마지막 값부터 시작하는 리버스 인데긋 기능도 있다. 기존 인데긋와 달리 마지막 값부터 -1을 할당하여 첫 번째 값까지 역순으로 올라오는 방식이다.
>>> ['서울', '부산', '인천', '대구', '대전', '광주', '울산', '수원']
인덱스 범위를 넘어가는 슬라이싱 (slicing with over index)
>>>['서울', '부산', '인천', '대구', '대전', '광주', '울산', '수원']
>>>['서울', '부산', '인천', '대구', '대전', '광주', '울산', '수원']
이해했쩨 ? 넘어간다잉
증가값(Step)
슬라이싱에서는 시작 인덱스와 마지막 인덱스 외에 마지막 자리에 증가값을 넣을 수 있다.
선언 형태: 변수명[시작 인덱스:마지막 인덱스:증가값]
2행은 2칸 간격으로 출력한다는 의미고
3행은 역방향 증가값이므로
>>>['서울', '인천', '대전', '울산']
>>>['수원', '울산', '광주', '대전', '대구', '인천', '부산', '서울']
와 같은 결과값이 나온다.
리스트의 연산
덧셈연산, 곱센연산, in연산
>>>['red', 'blue', 'green', 'red', 'blue', 'green']
>>>['red', 'blue', 'green', 'orange', 'black', 'white']
>>>True
>>>False
리스트의 곱셈은 같은 리스트를 n배만큼 늘려준다.
리스트끼리의 덧셈은 각 리스트가 하나의 리스트로 합쳐져 출력된다.
in 연산은 포함 여부를 확인하는 연산으로, 하나의 값이 해당 리스트에 들어 있는지 확인할 수 있다.
리스트 추가 및 삭제
append(), extend(), insert(), remove(), del 함수를 제공한다.
append()
append() 함수를 사용하면 리스트 맨 끝 인덱스에 새로운 값을 추가할 수 있다.
>>>['red', 'blue', 'green', 'white']
extend()
extend() 함수는 리스트의 덧셈 연산과 같다. 즉, 값을 추가하는 것이 아닌 기존 리스트에 그대로 새로운 리스트를 합치는 기능을 하는 것이다.
>>>['red', 'blue', 'green', 'black', 'purple']
insert()
insert() 함수는 append 함수와 달리 리스트의 특정 위치에 값을 추가할 수 있다.
>>>['orange', 'red', 'yellow', 'blue', 'green']
remove()
remove() 함수는 리스트에 있는 특정 값을 지우는 기능을 한다. 삭제할 값을 remove() 함수 안에 넣으면 리스트에 있는 해당 값이 삭제된다.
>>> ['red', 'blue', 'green']
>>> ['blue', 'green']
인덱스의 재할당과 삭제
특정 인덱스값을 변경(재할당)하거나 삭제하는 방법에 대하여
>>>['orange', 'blue', 'green']
>>>['blue', 'green']
2행에서
0번째 인덱스에 'red' 가 있던 것을 color[0]='orange' 코드를 실행하여 'orange' 로 변경하였다.
del 함수는 사실 리스트의 특정값을 지우는 함수가 아니라 변수 자체를 삭제하는 명령이라고 한다만...
만약 del 함수에 리스트 내 특정 인덱스를 지정하면, remove()함수처럼 해당 인덱스값을 삭제하고 그 이후에 있는 값들을 앞으로 이동시킨다. del color[0] 코드처럼 0번째 값을 삭제하라고 입력하면, 0번째 인덱스에 있던 'orange'가 삭제되는 것을 확인할 수 있다.
패킹과 언패킹
리스트의 사용법 중 하나인 패킹packing과 언패킹unpacking에 대해 알아보자.
패킹과 언패킹은 리스트 뿐만아니라 다른 시퀀스 자료형에서 일반적으로 사용할 수 있는 방법이다.
>>>[1, 2, 3] 1 2 3
패킹은 특별한 뜻이 아니다. 한 변수에 여러개의 데이터를 할당하는 것, 그 자체를 패킹이라고 하며, 리스트 자체를 뜻하기도 한다. 위 코드로 해석하자면, 변수 t는 값 1,2, 3 을 패킹한 것이 된다.
반대로 언패킹은 한 변수에 여러개의 데이터가 들어 있을 때 그것을 각각의 변수로 반환하는 방법이다. 위 코드를 보면 t에 있는 값 1,2,3을 변수 a,b,c에 할당해 준다. 이것이 언패킹인겨~
만약 리스트에 값이 3개인데 5개로 언패키응ㄹ 시도하면 에러가 발생한다. 언패킹 시 할당받는 변수의 개수가 적거나 많으면 모두 에러가 발생한다잉
이차원 리스트
리스트를 효율적으로 활용하기 위해 여러 개의 리스트를 하나의 변수에 할당하는 이차원 리스트를 사용할 수 있다. 이차원 리스트는 행렬과 같은 개념이다(ㅆㅂ)
>>>[[49, 79, 20, 100, 80], [43, 59, 85, 30, 90], [49, 79, 48, 60, 100]]
국어, 수학, 영어 점수를 kor_score, math_score, eng_score 에 할당하고
이 변수들 각각 모두 midterm_score에 할당한다.
이때 midterm_score가 이차원 리스트가 된다.
이차원 리스트에 인덱싱하여 값에 접근하기 위해서는 다음 코드와 같이 대괄호 2개를 사용한다
>>>20
[0]은 행 [2] 는 열 ㅇㅇ
'Python 독학 > python 기본' 카테고리의 다른 글
The Basics of Python Chapter04-조건문 (0) | 2023.09.11 |
---|---|
The Basics of Python Chapter03 연습 문제 (0) | 2023.09.10 |
The Basics of Python Chapter03 (05), (0) | 2023.09.05 |
The Basics of Python Chapter 01~02 (0) | 2023.08.30 |
Python 기본 공부하기에 앞서 (0) | 2023.08.30 |