a= [1,2,3,22] 02wk-2: 파이썬의 자료형 (3)
강의영상
https://youtube.com/playlist?list=PLQqh36zP38-yYY4_T4ZDcUeMLxFJma2B3
list 기본내용
선언
- 리스트의 선언
- 비어있는 리스트의 선언
a= []
a[]
a= list()
a[]
연산
- 더하기연산
[1,2]+[-3,4,5][1, 2, -3, 4, 5]
- 우리의 예상과 다른 결과가 나옴 \(\to\) 파이썬은 R처럼 자체적으로 좋은 계산기능을 내장하고 있지 않음.
- 브로드캐스팅과 같이 R에서는 당연히 가능했던 기능을 사용할 수 없음.
[1,2,3,4,5] + 1TypeError: can only concatenate list (not "int") to list
- 뺄셈은 정의되지 않음
a= [1,2,1,2]
a-[1,2]TypeError: unsupported operand type(s) for -: 'list' and 'list'
- 곱하기는 정의가능
[1,2]*3[1, 2, 1, 2, 1, 2]
- 나눗셈은 정의되지 않음
[1,2,1,2,1,2] /3TypeError: unsupported operand type(s) for /: 'list' and 'int'
- 더하기와 곱하기는 원소의 추가와 반복추가를 의미하지만 그렇다고 해서 뺄셈과 나눗셈이 원소의 삭제를 의미하는것은 아님
- 더하기와 곱하기가 원소의 추가와 반복추가를 의미하여 편리할때도 있긴하지만, 우리는 산술적인 +, * 를 원하는 경우도 있다. 이럴 경우는 어떻게 할 수 있을까?
(예제)
a=[1,2]
b=[3,4]a+b = [4,6] 이 되도록 하려면?
(풀이1)
[a[0]+b[0],a[1]+b[1]][4, 6]
풀이가 가능한 이유? a,b는 리스트이지만 a[0], a[1], b[0], b[1] 은 각각 인트형임. 인트형은 + 연산이 가능했음.
(풀이2)
numpy 패키지 (파이썬의 여러 수치연산들을 담당하는 라이브러리)
- 이러한 벡터연산은 누구나 필요로 하는 연산임.
- 내가 아니더라도 누군가가 프로그램화 해놓았을 것임.
- 그 누군가가 자신이 만든 코드를 잘 정리하여 무료로 배포했을 수도 있음. (패키지를 배포한다고 표현)
- 그 패키지를 우리는 가져와서 설치한뒤 사용하기만 하면된다.
패키지를 설치하는 방법
!pip install numpy# 최신버전을 설치함!conda install -c conda-forge numpy -y# 안전한 버전을 설치함
설치된 패키지를 사용하는 방법
import numpy한뒤에numpy.??로 기능을 사용import numpy as np한뒤에np.??로 기능을 사용
import numpy ## 설치한패키지를 쓰겠다고 선언함 a=[1,2]
b=[3,4]aa = numpy.array(a)
bb = numpy.array(b)aa+bbarray([4, 6])
여러가지 연산 가능 (마치 R처럼 쓸 수 있음)
2*aaarray([2, 4])
2*aa+1array([3, 5])
2*aa+1+bbarray([6, 9])
(풀이3)
import numpy as np ## 설치한 numpy라는 패키지를 쓰겠음. 그런데 numpy말고 np라는 이름으로 쓰겠음np.array(a)+np.array(b)array([4, 6])
인덱싱
- str형과 동일한 방식
a=[11,22,33,44,55] # 0 -4 -3 -2 -1a[-2:] # 끝의 2개의 원소를 뽑음 [44, 55]
list 고급내용 1
콘테이너형 객체
- 리스트의 원소는 int, float 따위만 가능한 것이 아니다. (리스트는 컨테이너형 객체이므로)
lst = [1,3.14,True,'a',[1,2],
(1,2),{'name':'iu','age':27},{1,2,3}]lst[1, 3.14, True, 'a', [1, 2], (1, 2), {'name': 'iu', 'age': 27}, {1, 2, 3}]
각 원소의 타입을 알아보자.
type(lst[0])int
type(lst[1])float
type(lst[2])bool
type(lst[3])str
type(lst[4])list
type(lst[5])tuple
type(lst[6])dict
type(lst[7])set
- str은 컨테이너형이 아니다.
'abcd'[2]'c'
- str의 모든 원소는 문자임
가변객체
- 리스트는 원소를 수정할 수 있다. (리스트는 가변객체이므로)
a=[11,22,33]
a[11, 22, 33]
a[0]11
a[0]=111a[111, 22, 33]
- 원소수정은 당연한 기능같은데 이것이 불가능한 경우도 있다.
(가능한경우)
a=['g','u','e','b','i','n']
a['g', 'u', 'e', 'b', 'i', 'n']
a[0]'g'
a[0]='G'a['G', 'u', 'e', 'b', 'i', 'n']
(불가능한경우)
a='guebin'
a'guebin'
a[0]'g'
a[0]='G'TypeError: 'str' object does not support item assignment
리스트의 원소 삭제
(예제1) del을 이용한 원소삭제
아래와 같이 문자로 된 리스트를 선언하자.
a=['g','u','e','b','i','n']
a['g', 'u', 'e', 'b', 'i', 'n']
사실 더 쉽게 선언할 수 있음
list('guebin')['g', 'u', 'e', 'b', 'i', 'n']
첫번째 원소를 삭제하고 싶다면?
del a[0]
a['u', 'e', 'b', 'i', 'n']
이 상태에서 다시 첫번째 원소를 삭제한다면?
del a[0]
a['e', 'b', 'i', 'n']
(예제2) pop을 이용한 원소삭제
a=list('guebin')
a['g', 'u', 'e', 'b', 'i', 'n']
a.pop(0)'g'
a['u', 'e', 'b', 'i', 'n']
a.pop(0)'u'
a['e', 'b', 'i', 'n']
HW 0315
1. 길이가 0인 리스트를 만들어라. (비어있는 리스트를 만들어라)
(풀이1)
[][]
(풀이2)
list()[]
2. 다음의 실행값 중 가장 큰 숫자가 나오는 보기를 골라라. (에러가 나는 코드는 정답에서 제외함)
(a) len(3.14)
(b) len([3.14])
(c) len('3.14') (풀이)
len(3.14)TypeError: object of type 'float' has no len()
len([3.14])1
len('3.14')4
따라서 답은 (c)
3. 아래의 예제를 관찰하라.
'제 이름은 {}입니다'.format('최규빈')'제 이름은 최규빈입니다'
'제 이름은 {}이고 사는곳은 {}입니다.'.format('최규빈','전주')'제 이름은 최규빈이고 사는곳은 전주입니다.'
이 예제를 바탕으로 문자열에 포함된 .format()함수의 기능을 유추하라. 그리고 아래의 결과를 확인하라.
string = '전북대학교 학생엠티가 {}월{}일-{}월{}일 완주 곶감펜션에서 있다고 합니다. 자세한 일정 등은 다시 공지하겠습니다.'
string.format(3,24,3,25)ChatGPT를 활용하여 .format()함수의 기능을 학습하라.
(풀이)
생략
4. 아래의 예제를 관찰하라.
'abcdefg'.replace('g','u')'abcdefu'
이 예제를 바탕으로 문자열의 .replace() 기능을 유추하라. 유추한 기능을 chatGPT로 확인하라.
(풀이)
생략
5. 리스트자료형의 +와 * 연산을 이용하여 아래와 같은 list를 생성하라.
[1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5][1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5]
hint: 아래의 코드를 관찰해보세요
[1]*1+[2]*2 [1, 2, 2]
(풀이)
[1]*1+[2]*2+[3]*3+[4]*4+[5]*5[1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5]
6. 넘파이를 이용하여 아래와 같은 결과가 나오도록 코드가 작성하라.
\[\begin{bmatrix} 1 \\ 2 \end{bmatrix} + \begin{bmatrix} 11 \\ 22 \end{bmatrix} = \begin{bmatrix} 12 \\ 24 \end{bmatrix}\]
(풀이)
import numpy as npnp.array([1,2]) + np.array([11,22]) # 풀이1array([12, 24])
np.array([[1],[2]]) + np.array([[11],[22]]) # 풀이2array([[12],
[24]])
풀이1,2 모두 좋음
7. 아래와 같은 벡터 \({\boldsymbol a}\)가 있다고 하자.
\[\boldsymbol{a}= \begin{bmatrix} 12 \\ 24 \end{bmatrix}\]
넘파이를 이용하여 아래의 결과가 나오게 하는 코드를 작성하라.
\[2\boldsymbol{a}= \begin{bmatrix} 24 \\ 48 \end{bmatrix}\]
(풀이)
2*np.array([12,24]) # 풀이1array([24, 48])
2*np.array([[12],[24]]) # 풀이2array([[24],
[48]])