[Python] 억장 와르르멘션

장세민·2023년 2월 20일
0

📝 TIL

목록 보기
32/40
post-thumbnail

어떤 프로그래밍 언어든 자료형을 충분히 이해하지 않고 프로그래밍을 시작하면
나중에 프로그램을 만들때 억장이 와르르 무너져 버릴 수 있다.
그럼 기초 공사를 시작해보자.

📖 자료형

여러 자료형을 배워보기 전 딱 하나만 기억하고 가자.

연산은 자료형이 같은 경우에만 할 수 있다.
그럼 자료형마다 어떻게 연산이 다른 지 알아보자.



숫자형

숫자형은 우리가 흔히 사용하는 숫자로 이루어진 자료형이고,
우리가 잘 알고 있는 정수, 실수도 있지만,
친숙하지 않은 8진수, 16진수도 있다.

8진수와 16진수

8진수(Octal): 숫자가 0o 또는 0O로 시작
16진수(Hexadecimal): 숫자가 0x로 시작

숫자형을 활용하여 연산을 해보자.

  1. a = 3
  2. b = 10
  3. print(a + b)
  4. print(a - b)
  5. print(b / a)
  6. print(b // a)
  7. print(b * a)
  8. print(b ** a)
  9. print(b % a)

13
-7
3.3333333333333335
3
30
1000
1

5번째 줄의 '/'와 6번째 줄의 '//'의 차이는?
'/'는 나눗셈 결과를 그대로 돌려주지만, '//'는 나눗셈 후 몫을 반환해준다.


문자열

다음은 문자열(String)이다.
문자열을 만들 때는 'apple', "banana" 처럼 따옴표를 사용해야 하고,
줄이 다른 문자열을 만들고 싶을 때는

  1. multiline="""
  2. Semin is
  3. handsome
  4. """

이처럼 연속된 따옴표 3개를 사용하여 만들 수 있다.

인덱싱과 슬라이싱

s = "jang semin" 문자열에서
필요한 부분만 추출하고 싶다면?
인덱싱 또는 슬라이싱을 통해 추출할 수 있다.

  1. s = 'jang semin'
  2. print(s[0]) #인덱싱
  3. print(s[0:5])
  4. print(s[:10:2])
  5. print(s[::2])
  6. print(s[::-1])

j
jang
jn ei
jn ei
nimes gnaj

두번째 줄처럼 인덱싱을 활용해 특정 요소를 추출할 수도 있고,
3번째~6번째 줄처럼 슬라이싱을 활용해 부분을 뽑아낼 수도 있다.

슬라이싱 기법을 사용할 때 시작번호와 끝 번호를 꼭 지정해주지 않아도 되고,
끝 번호 index는 추출 시 포함하지 않는다는 것을 기억하자.

6번째 줄의 [-1]이 뜻하는 건 뒤에서부터 추출 한다는 것이다.


만약 Pithon이라는 문자열을 Python으로 바꿔보는 실습 중

  1. a = "Pithon"
  2. print(a[1])
  3. a[1] = 'y'

a 변수에 "Pithon"을 대입하고, a[1]의 값을 y로 바꿔주려 했으나,

오류가 발생한다. 왜?

문자열의 요솟값은 바꿀 수 없는 immutable 자료형 이기 때문이다.

따라서, 문자열 요소 변경은 인덱싱과 슬라이싱으로 해야한다!

  1. a = "Pithon"
  2. print(a[:1] + 'y' + a[2:])

문자열 포매팅

"현재 생활관 온도는 18도 입니다."
시간이 흐른 후 다시 재보니, 20도로 변했다.
이렇게 특정한 값을 바꿔야 할 경우 포매팅 기법을 쓴다.

  1. a = 'I eat %s apples.' % 3
  2. print(a)

이렇게 문자열 포맷 코드를 사용하여 바로 대입할 수도 있고,

  1. name = '장세민'
  2. age = 23
  3. print(f'나의 이름은 {name}입니다. 나이는 {age}입니다.')

이름으로 넣을 수도 있다.


문자열 함수

문자열 자료형은 문자열 내장 함수를 가지고 있다.

  1. s = ' jang semin '
  2. print(s.upper()) #대문자 변환
  3. print(s.lower()) #소문자 변환
  4. print(s.count('n')) #문자 개수 세기
  5. print(s.find('n')) #위치 알려주기1, 존재하지 않으면 -1
  6. print(s.index('n')) #위치 알려주기2, 존재하지 않으면 오류
  7.  
  8. a = s.split(' ') #문자열 ''기준으로 나누기
  9. print(a)
  10. print('!'.join(a)) #문자열의 각각의 문자 사이에 ''삽입
  11. print(s.lstrip()) #왼쪽 공백 지우기
  12. print(s.rstrip()) #오른쪽 공백 지우기

기억해두자


리스트 자료형

리스트 안에는 어떠한 자료형도 포함시킬 수 있다.

a = []
b = [1,2,3]
c = ['life', 'is', 'too', 'short']
d = [1, 2, 'life', 'is']
e = [1, 2, ['life', 'is']]

이런 리스트의 가장 중요한 특징은 다음과 같다.

  1. 순서가 있다.
  2. 요소의 값을 수정이나 삭제할 수 있다.
  1. e = [1, 2, ['life', 'is']]
  2. e[2][0] = 'semin'
  3. print(e)

[1, 2, ['semin', 'is']]


리스트의 길이를 구하기 위해서는 len함수를 사용해야 한다.

  1. print(len(e))

3


리스트 관련 함수

  1. l = [400, 200, 100, 200, 300]
  2. l.append(500) #리스트에 요소 추가
  3. l.sort() #리스트 오름차순 정렬
  4. print(l)
  5. l.reverse() #리스트 내림차순 정렬
  6. print(l)
  7. l.insert(1, 600) #리스트의 a번째 위치에 b 삽입
  8. print(l)
  9. print(l.count(300)) #리스트에 포함된 요소 x의 개수 세기
  10. l.extend([100, 200, 300]) #원래 리스트에 x리스트 더함
  11. print(l.pop()) #맨 마지막 요소를 돌려주고 그 요소 삭제
  12. l.remove(100) #리스트에서 첫 번째로 나오는 x 삭제
  13. print(l)

[100, 200, 200, 300, 400, 500]

[500, 400, 300, 200, 200, 100]

[500, 600, 400, 300, 200, 200, 100]
1
300
[500, 600, 400, 300, 200, 200, 100, 200]

튜플 자료형

튜플(tuple)은 리스트와 거의 비슷하며 리스트와 다른 점은 다음과 같다.

  • 리스트는 []으로 둘러싸지만 튜플은 ()으로 둘러싼다
  • 리스트는 값의 생성-삭제-수정이 가능하지만 튜플은 그 값을 바꿀 수 없다.
t1 = ()
t2 = (1,)
t3 = (1, 2, 3)
t4 = 1, 2, 3
t5 = ('a', 'b', ('ab', 'cd'))

t2 = (1,) 처럼 단지 1개의 요소만을 가질 때는 요소 뒤에 콤마(,)를 반드시 붙여야 하고,
t4 = 1, 2, 3처럼 괄호()를 생략해도 무방하다는 점 기억하자!

딕셔너리 자료형

요즘 사용하는 대부분의 언어는 연관 배열 또는 해시(Hash)를 통해
'이름' = '장세민, '나이' = 23 처럼 대응관계를 나타낼 수 있는 자료형을 갖고 있다.

파이썬에는 이를 딕셔너리 자료형을 통해 구현할 수 있다.

딕셔너리 자료형의 가장 큰 특징은

  • 리스트나 튜플처럼 순차적으로 해당 요솟값을 구하지 않고 Key를 통해 Value를 얻는다.
dic = {'name':'pey', 'phone':'0119993323', 'birth': '1118'}
KeyValue
namepey
phone0119993323
birth1118

리스트나 튜플, 문자열은 요솟값을 얻고자 할 때 인덱싱이나 슬라이싱 기법을 사용하지만,
다음 예시처럼

  1. grade = {1:'a', 2:'b'}
  2. print(grade[1]) #Key가 1인 요소의 Value를 반환
  3. print(grade[2]) #Key가 2인 요소의 Value를 반환

a
b

[]안의 숫자는 n번째 요소를 뜻하는 것이 아니라 Key에 해당하는 값을 나타낸다.
앞에서도 말했듯이 인덱싱 방법은 딕셔너리 자료형에 적용할 수 없다.

딕셔너리 만들 때 주의사항

  1. a = {1:'a', 1:'b'}
  2. print(a)

먼저 딕셔너리에서 Key는 고유 값이므로 중복되는 Key값을 설정해 놓으면
하나를 제외한 나머지 것들이 모두 무시된다.

또 한 가지 주의해야 할 사항은 Key에 리스트는 쓸 수 없다.
딕셔너리의 Key로 사용 여부는 Key가 가변하는 값인지 아닌지에 따라 달려 있다.

  1. a = {[1,2]: 'hi'}
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-6-1620a8a90d9a> in <module>
----> 1 a = {[1,2]: 'hi'}
 
TypeError: unhashable type: 'list'

단 Value에는 변하는 값이든 변하지 않는 값이든 상관없이 아무 값이나 넣을 수 있다.

딕셔너리 관련 함수

  1. a = {'name':'pey', 'phone': '0119993323', 'birth': '1118'}
  2. print(a.keys()) #Key 리스트 만들기, 리스트 고유 함수는 사용 x
  3. print(a.values()) #Value 리스트 만들기
  4. print(a.items()) #Key, Value 쌍 튜플로 돌려줌
  5. print(a.get('name')) #Key로 Value 얻기
  6. print(a.clear()) #Key:Value 쌍 모두 지우기
dict_keys(['name', 'phone', 'birth'])
dict_values(['pey', '0119993323', '1118'])
dict_items([('name', 'pey'), ('phone', '0119993323'), ('birth', '1118')])
pey
None

집합 자료형

  1. s1 = set("Hello")
  2. print(s1)
{'e', 'H', 'o', 'l'}

결과가 좀 이상하다.
l문자가 하나 빠져있고, 순서도 엉망이다.

그 이유는 집합에는 가장 중요한 특징이 있기 때문이다.

  • 중복을 허용하지 않는다.
  • 순서가 없다(Unordered).

순서가 없다는건? 인덱싱으로 값을 얻을 수 없다는 것

교집합, 합집합, 차집합 구하기

  1. s1 = set([1, 2, 3, 4, 5, 6])
  2. s2 = set([4, 5, 6, 7, 8, 9])
  3. print(s1 & s2) #교집합
  4. print(s1.intersection(s2)) #교집합
  5. print(s1|s2) #합집합, 중복해서 포함된 값은 한 개씩만 표현
  6. print(s1.union(s2)) #합집합
  7. print(s1 - s2) #차집합
  8. print(s1.difference(s2)) #차집합

{4, 5, 6}
{4, 5, 6}
{1, 2, 3, 4, 5, 6, 7, 8, 9}
{1, 2, 3, 4, 5, 6, 7, 8, 9}
{1, 2, 3}
{1, 2, 3}

집합 자료형 관련 함수

  1. s1 = set([1, 2, 3])
  2. s1.add(4) #값 1개 추가
  3. print(s1)
  4. s1.update([5, 6, 7]) #값 여러 개 추가
  5. print(s1)
  6. s1.remove(2) #특정 값 제거
  7. print(s1)

{1, 2, 3, 4}
{1, 2, 3, 4, 5, 6, 7}
{1, 3, 4, 5, 6, 7}


불 자료형

  1. a = True
  2. b = False
  3. print(type(a))
  4. print(type(b))

<class 'bool'>
<class 'bool'>

불(bool) 자료형은 참(True)과 거짓(False)을 나타내는 자료형이다.

자료형의 참과 거짓

자료형에 참과 거짓이 존재한다는 말은 이상할 지 몰라도 분명히 존재한다!

자료형참 or 거짓
문자열""거짓
리스트[]거짓
튜플()거짓
딕셔너리{}거짓
숫자형0이 아닌 숫자
None거짓

문자열, 리스트, 튜플, 딕셔너리 등의 값이 비어 있으면 거짓이다.
숫자에서는 값이 0일 때 거짓이 된다.



오늘은 여기까지

profile
분석하는 남자 💻

0개의 댓글