Chapter 4 : 여러 연산자¶
이전까지 집합과 간단한 출력에 대해서 배웠어요.
머신러닝에서 데이터에 대한 정보의 요약이나 데이터마이닝을 할 때
우리는 관심있는 영역을 제한해야 할 때가 많죠.
그럴 때 수학적으로나 프로그래밍적으로나 생각하기 쉬운 게 집합이에요.
집합을 잘 배웠으니 오늘은 한번 집합 이외에 다른 것들을 어떻게 계산하는 지 배워볼게요.
지겹지만 조금만 더 나가면 진정한 프로그래밍 문제들을 풀 수 있게 될 거에요. 화이팅!
파이썬에서 가장 많이 쓰는 연산자들이에요.
차례대로 더하기, 빼기, 곱하기, 몫, 나머지(나누기의)에요.Q1 : a=1239081023890128390 b=123171823781237가 주어져있을 때 위의 연산을 해보세요
그런데 우리는 처음에 집합을 시작했을 때 []로 시작했고, 이게 사실은 집합이 아닌 List라고 했어그런데 우리는 처음에 집합을 시작했을 때 []로 시작했고, 이게 사실은 집합이 아닌 List라고 했어요.
List는 일종의 저장소에요. 수들이나 아니면 문자들을 더해나갈 수 있죠
Out[4]:
[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]
Out[5]:
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
근데 리스트의 연산을 하고자 할 땐 +보단 이미 List안에 있는 함수들을 이용할 때가 많아요.
저번에 봤던 append처럼 말이죠.
['a', 'b', 'c', 'd', ['e', 'f', 'g', 'h']]
어라? 저번에 append를 배웠었는데 두개가 뭔가 다르네요? 왜 그럴까요?
append는 b라는 것을 넣는다는 건데 b 또한 수가 저장되어 있는 저장소이기 때문에 통째로 들어가는거죠.append를 쓰는 이유는 뭘까요? 예를 들어 List안에 List가 아닌 숫자나 문자를 넣고 싶다면 +는 할 수가 없어요. type이 다르기 때문이죠
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-8-f1d53b280433> in <module>()
----> 1 a+b
TypeError: can only concatenate list (not "int") to list
컴퓨터 입장에서 생각해보면 쉬워요. 문자와 문자를 더해 문자를 나타내고, 숫자와 숫자를 더해 숫자를 반환하는 것처럼
List와 List를 더해 List를 반환해야 하는데 숫자와 더해지니 컴퓨터는 혼돈에 빠져 오류가 발생하는 거죠.
이 외에 List를 더 구체적으로 알아볼게요.
extend(확장한다)는 정확히 +와 같은 연산이에요.
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
그리고 우리는 순서에도 관심이 많을 때가 있다고 했었죠?!
['a', 'b', 'c', 'd', ['e', 'f', 'g', 'h']]
a
b
c
d
['e', 'f', 'g', 'h']
근데 만약 데이터를 잘못 넣어서 제거하고 싶을 땐 어떡할까요?
pop이라는 함수는 뒤에서부터 제거하는 동시에 나가는 데이터를 출력(print)해주는 함수에요
두 번이나 했으니 d까지 빠진거죠!
처음부터 4번째가 빼고싶을 땐 del(삭제하다)를 사용할 수도 있어요.
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-20-20942bac2219> in <module>()
----> 1 del a[4]
IndexError: list assignment index out of range
아까전에 원소를 뺏으니 그 위치에는 해당하는 값이 없는거죠.
혹은 그 위치에는 값이 없다라고 말해줘서 삭제할 수도 있죠.
슬라이싱을 할 때 마지막꺼는 참조하지 않는다고 했죠?! 3:4면 그냥 3이에요 ㅎㅎQ2 : 아래의 슬라이싱들의 결과를 보면서 어떤 의미일 지 추측해보세요.
0에서부터 (5-1)에 위치한 원소들을 불러낸다
Out[24]:
[2, 3, 4, 5, 6, 7, 8, 9, 10]
1부터 나머지까지 불러낸다
맨 뒤에서 첫 번째를 불러낸다
맨 뒤에서 3번째부터 (맨 뒤에서 첫 번째 - 1)의 위치까지 불러낸다
맨 뒤에서 (두번째-1)의 위치까지 불러낸다
Out[28]:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
모든 원소들을 불러낸다.
::는 슬라이싱에 같은 간격의 순서(등차수열)들의 위치들을 불러낼 수 있어요
3씩 더한 위치의 원소들을 불러내는거에요!
Out[31]:
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
Out[32]:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
역으로 불러낸다. append나 extend, reverse(거꾸로 뒤집는다)의 경우는 값을 반환하지 않고 List가 자체가 변하는 반면 a는 단지 슬라이싱했기 때문에 순서가 바뀌지 않아요.
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
두 번 했기 때문에 다시 원위치로 돌아왔죠 ㅎㅎ
마지막으로 간단하게 List에 있는 함수들을 소개하고 오늘 강의는 끝내도록 할게요.
List에 있는 함수들은 거의 모두 사용할 정도로 많이 쓰이고 있어요.
머신러닝에서 데이터 작업을 하거나 프로그래밍 문제를 풀 때 많이 쓰이죠.
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, [2, 3]]
a안에 1이 몇개있니?(count = 개수를 세다)
a안에 [2,3]은 몇 번째 위치에 있니? 1은 몇 번째 위치에 있니?
<컴퓨터 처음부터 세기 때문에 0번째 위치만 반환하죠.>근데 빅데이터를 다루다면 데이터가 어디 어디에 위치해있는 지 궁금할 때가 많아요.
그래서 뒤에서 나올 함수를 만들어 의도한 결과를 나타낼 수 있어요.
[1, 10000, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, [2, 3]]
a안에 1 위치에 10000을 넣어줘
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, [2, 3]]
a안에 10000을 제거해줘
[2, 3, 4, 5, 6, 7, 8, 9, 10, 1, [2, 3]]
<컴퓨터 처음부터 세기 때문에 맨 처음에 있는 1만 제거하죠.>
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, [2, 3]]
a를 크기 순서대로 정렬해줘.
[[2, 3], 10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
이번 장 내용이 많았는데 공부하느라 너무 고생했어요.
다음 장부터 프로그래밍의 시작이에요.
다들 각오 단단히 하시고, 다음에 봐요!~