[Python, 기초 문법] 자료형(Data Type)(5) - Tuple, 다양한 사용법

이미지
이전 시간에는 Tuple의 개념에 대해, 그리고 List와의 공통점, 차이점에 대해 알아보았습니다. 이번 시간에는 Tuple의 다양한 쓰임에 대해 알아보겠습니다. 튜플의 생성 이전 시간에서도 알아 본 것 처럼, 튜플은 소괄호( () ) 안에 값을 입력해주면 생성됩니다. type (( 1 , 2 , 3 )) tuple 소괄호를 씌우지 않고도 숫자나 문자를 쉼표를 통해 나열하는 방식으로 튜플을 생성할 수도 있습니다. a = 1 , 2 , 3 , "사" ,[ 5 ] print (a) ( 1 , 2 , 3 , "사" ,[ 5 ]) 비록 튜플 안의 내용물은 바꿀 수 없지만, 튜플 끼리의 더하기 연산, 혹은 튜플의 곱하기 연산으로 새로운 튜플을 생성할 수 있습니다. 더하기를 할 경우 튜플 끼리 합쳐져서 나타나며, 곱하기 연산은 튜플과 int형 숫자를 입력해 동일한 튜플 내용물을 반복시켜 새로운 튜플로 만듭니다. a = ( 1 , 2 ) + ( 3 , 4 , 5 ) b = ( 10 , 11 , 12 ) * 2 print (a) print (b) ( 1 , 2 , 3 , 4 , 5 ) ( 10 , 11 , 12 , 10 , 11 , 12 ) 튜플의 함수 특정 값이 몇 번째 위치에 있는 지, 혹은 특정 값이 몇 개 있는 지 확인할 수 있는 함수를 공통적으로 가지고 있습니다. index와 count 함수인데, 변수안에 특정 자료형의 값을 넣고 <변수>.<함수>(<값>) 형태로 입력하거나, 자료형 데이터 그 자체에 함수를 달아서 사용할 수도 있습니다. a = ( 1 , 2 , 3 , 1 , 2 , 3 ) print (a . count( 3 )) print (( 2 , 2 , 2 , 100 ) . index( 100 )) 2 3 ...

[Python, 기초 문법] 자료형(Data Type)(5) - Tuple, 소개 및 List와의 차이점

이미지
  지금까지 데이터 묶음 형태의 자료형(자료 구조)인 List에 대해 알아보았습니다. 이번 포스트 에서는 데이터 묶음 형태의 자료형 중 하나인 Tuple 에 대해 알아보겠습니다. Tuple(튜플) 튜플은 리스트와 같이 여러 데이터를 하나의 묶음에 보관하는 형태를 지니고 있습니다. 다만 리스트의 경우 대괄호([])로 데이터들을 묶는 데 반해 튜플은 일반 괄호(())로 데이터를 묶어서 표현합니다. type (( 1 , 2 , 3 )) tuple 튜플 또한 리스트 처럼 튜플 안에 튜플, 튜플 안에 리스트가 들어갈 수 있습니다. num_tuple = ( 1 , 2 ,( 1 , 2 , 3 )) print (num_tuple[ 2 ]) print ( type (num_tuple)) print ( type (num_tuple[ 2 ])) ( 1 , 2 , 3 ) < class ' tuple '> < class ' tuple '> 튜플은 리스트 처럼 인덱싱, 슬라이싱이 가능합니다. num_tuple = ( 1 , 2 , 3 , 4 , 5 ) print (num_tuple[ 3 ]) print (num_tuple[ 2 : 4 ]) 4 ( 3 , 4 ) 지금까지 보면 튜플과 리스트는 표현 방식이 다르다는 점 빼고는 기능 상 별 차이가 없어보입니다. 하지만 튜플과 리스트의 차이는 존재합니다. 튜플은 자유롭게 다룰 수 있는 리스트와는 달리 내부 요소를 수정하는 것이 불가능 합니다. 아래 코드를 실행해보겠습니다. n_ls = [ 1 , 2 , 3 ] n_tuple = ( 1 , 2 , 3 ) n_ls[ 2 ] = 100 print (n_ls) n_tuple[ 2 ] = 100 print (n_tuple) [ 1 , 2 , 100 ] TypeError : 'tuple' object...

[Python, 기초 문법] 자료형(Data Type) (4) - List, 요소 제거

이미지
  지금까지 리스트를 다루는 법에 대해 알아보았습니다. 이번 포스트에선 리스트의 요소를 제거하는 법에 대해 알아보겠습니다. pop, del 리스트 내의 요소를 삭제하는 방법은 크게 두 가지가 있습니다. 하나는 append, extend 때 처럼 리스트에서 제공해주는 pop 함수를 활용하는 것이고, 다른 하나는 파이썬 내장 명령어인 del을 활용하는 것입니다. 먼저 pop은 이전 append 처럼, 요소를 제거하고 싶은 대상 리스트나 리스트가 담긴 변수 다음에 .pop()를 추가 입력하는 방식으로 사용합니다. test = [ 1 , 2 , 3 , 4 , 5 ] test . pop() 5 append나 extend 때와는 다르게 pop 함수 사용 시 반환 값이 있는 것을 확인할 수 있습니다. 일단은 [1,2,3,4,5] 안에 있는 값 5를 출력해준 것 같긴 한데, 이대로 어떤 요소가 바뀌었는 지 감이 잡히지 않습니다. test 변수에 담긴 리스트가 어떻게 바뀌었는 지 확인해봅시다. print (test) [ 1 , 2 , 3 , 4 ] 확인해본 결과 맨 뒤에 있던 숫자 5가 빠져나간 것을 확인할 수 있습니다. pop은 어떠한 파라메터(인자)도 전달하지 않으면 디폴트로 맨 뒤의 값을 제거하게 설정 되어 있습니다. 아래 코드를 실행 해봅시다. test = [ 1 , 2 , 3 , 4 , 5 ] test . pop( 0 ) print (test) [ 2 , 3 , 4 , 5 ] pop의 인자로서 0을 입력했습니다. 그 결과 리스트 맨 앞 인자를 제거한 것을 확인할 수 있습니다. 이렇게 pop은 리스트에서 원하는 위치의 요소를 손쉽게 제거할 수 있습니다. 다만 지정한 인덱스가 리스트의 범위를 벗어나게 될 경우 아래와 같은 에러가 발생하니 주의해주세요. test = [ 1 , 2 , 3 , 4 , 5 ] test . pop( 100 ) print (test) ...

[Python, 기초 문법] 자료형(Data Type) (3) - List, 요소 추가

이미지
이전 포스트에서 리스트의 설명과 인덱싱, 슬라이싱에 대해 알아보았습니다. 이제 리스트의 요소 추가에 대해 알아봅시다. 리스트 사칙연산 간단한 사칙연산으로 리스트 내부에 새로운 요소를 추가할 수 있습니다. 아래 코드를 입력해봅시다. 새로운 리스트를 생성하고, 리스트에 새로운 값을 이어 붙이는 코드입니다. a = [ 1 ] a = a + [ 2 ] print (a) a = [ - 1 , 0 ] + a print (a) [ 1 , 2 ] [ - 1 , 0 , 1 , 2 ] 새로이 리스트를 생성하고, 내부 요소로 1을 넣었습니다. 그리고 그 리스트 뒤에 [2]라는 새로운 리스트를 연결하여 [1, 2]라는 리스트가 만들어졌고, [1, 2] 앞에 [-1, 0] 리스트를 붙여 [-1, 0, 1, 2] 리스트를 만드는 모습입니다. 위의 리스트에 곱하기 연산을 진행해봅시다. a * 2 [ - 1 , 0 , 1 , 2 , - 1 , 0 , 1 , 2 ] [-1, 0, 1, 2] 가 한 번 더 붙는 모습을 볼 수 있습니다. 이렇게 리스트는 사칙연산으로 요소를 추가할 수 있지만, 더하기의 경우 리스트 끼리만 사용 할 수 있고, 곱하기의 경우 리스트와 정수형 숫자로만 연산 이 가능하여 사용하는데 많은 제약이 있음을 알 수 있습니다. 또한 리스트는 빼기나 나누기는 아예 사용할 수 없다는 특징 을 가지고 있습니다. append, extend, insert 리스트에 요소를 추가하는 제일 기본적인 기능인 append 와 extend, insert에 대해 알아봅시다. 먼저 append는 리스트 class가 가지고 있는 내장 함수로, (쉽게 리스트 형태의 데이터들은 이런 기능을 사용할 수 있다 정도로만 이해하시면 되겠습니다.) 리스트에 새로운 요소를 추가할 수 있는 함수 입니다. 아래의 코드를 실행해봅시다. a = [...

[Serverless Framework with Python] 정보 모음 - opencv-python 라이브러리를 aws lambda에 업로드하기

이미지
최근에 업무에 쓰기 위해, opencv-python을 aws lambda에 이식하려고 난리를 쳤습니다. 길진 않지만 약 이틀 정도 각고의 노력을 한 끝에 겨우 이식하긴 했습니다만, 아무래도 패키지 종속 (해당 lambda 패키지에서만 사용 가능)이 발생할 것 같아 레이어 방식보다는 단점이 있는 것 같습니다. 그래도 opencv-python 등지의 라이브러리를 굳이 Docker 키고 가상 환경에서 설치하는 번거로움을 거치지 않고 서버리스 프레임워크만을 활용해 바로 업로드하는 등 (물론 서버리스 프레임워크 상에서 Docker를 실행하는 거지만요) 다양한 방법으로 활용할 수 있을 것 같아 내용을 정리합니다. ( 해당 작업은 pycharm python 3.8 serverless Framework 1.79 에서 진행되었습니다. ) ※ 이번 포스트의 내용을 진행하려면 꼭 docker를 설치한 상태여야 합니다! 서버리스 프레임워크를 쓰면서, 별 생각없이 라이브러리를 설치 한 후 (파이썬 같은 경우엔 pip 방식이 되겠죠) 코드를 냅다 올리려고 하면 aws lambda 상에서 라이브러리를 찾을 수 없다고 뜨는 경우를 꽤나 자주 겪었습니다. 이는 저의 개발 환경의 운영체제와 아마존 클라우드 서비스 상의 운영체제가 다르기 때문에 주로 발생하는 문제인데요, 아마존 클라우드 서비스의 운영체제는 linux이고 제가 쓰는 개발 환경 운영체제는 주로 윈도우나 맥 OS 이기 때문에, 만일 pip install 블라블라.. 이런식으로 별 조치 없이 라이브러리를 설치하게 될 경우 제가 사용하는 운영체제 기반으로 라이브러리가 설치 되며, 막상 aws lambda로 코드가 올라갔을 경우 라이브러리를 찾지 못해 에러를 뱉어내게 됩니다. 아무래도 라이브러리 작동 방식이나 경로 등이 OS 별로 다르게 작동하기에 발생하는 문제라고 알고 있습니다. 이러한 문제를 해결하려면 다음의 과정을 거쳐야 합니다. ...

[Python, 기초 문법] 자료형(Data Type) (2) - List, 인덱싱과 슬라이싱

이미지
  이전에 단일 데이터 형태의 자료형에 대해 알아보았습니다. 이제 데이터 묶음 형태의 자료형에 대해 배워봅시다. 데이터 묶음(자료구조) 데이터 묶음 형태의 자료형으로는 List, Tuple, Set, Dictionary 이 있습니다. 데이터 묶음 형태는 전문적인 용어로 자료구조 라고 표현합니다. 자료구조의 위키피디아 설명에 의하면, "자료 구조는 데이터 값의 모임, 또 데이터 간의 관계, 그리고 데이터에 적용할 수 있는 함수나 명령을 의미" 라고 합니다. 비단 데이터들이 모여있는 형태말고도, 그 데이터들이 어떤 관계로 묶여있는지 , 그 데이터에 어떻게 접근하거나 사용할 수 있는 지 에 대한 개념도 자료구조라고 하는 것 같네요. 여기서는 이해하기 쉽게 데이터 묶음 이라고 명명하겠습니다. 자료구조에 대한 자세한 설명은 위키피디아에서 확인할 수 있습니다. 링크 남겨두겠습니다. 위키피디아-자료구조 : https://ko.wikipedia.org/wiki/%EC%9E%90%EB%A3%8C_%EA%B5%AC%EC%A1%B0 데이터 묶음의 경우 여러 데이터를 한 데 보관한다는 점에서 공통점을 가지고 있으나, 어떤 방식으로 모아두고 있느냐 에 따라 차이가 있습니다. 이제부터 하나하나 알아보도록 하죠. List(리스트) 먼저 List(리스트) 입니다. 데이터 묶음 형태의 제일 기본적인 형태입니다. 대괄호([])가 데이터들을 감싸고, 쉼표로 데이터가 구분됩니다. 아래 코드를 실행해 봅시다, type ([ 1 , 2 ...

[Python, 기초 문법] 자료형(Data Type) (1) - 자료형, 정수, 실수, 문자

이미지
자료형이란? 자료형(Data Type)이란 프로그래밍 언어, 컴퓨터에서 데이터를 취급하는 분류 를 의미합니다. 예시를 들어보자면, 우리가 뭔가 계산기 프로그램을 만든다고 하면 주로 숫자 데이터를 취급하게 될 겁니다. 혹은 어떤 사이트에서 아이디 / 패스워드가 정말 등록된 사용자인지 확인하려면, 아이디 / 패스워드 문자 데이터를 검증해서 접속 시켜줄 지 말지 생각하겠죠. 계산기를 이용할 때 우리는 숫자를 입력하죠. 사이트에 접속할 때 우리는 문자로 이루어진 계정을 입력합니다.   우리가 숫자 / 문자 이렇게 어떤 데이터들의 특성을 구분하는 것 처럼 컴퓨터도 각 데이터를 달리 취급합니다. 이렇게 컴퓨터가 데이터를 취급하는 일련의 분류, 혹은 데이터의 특성 을 자료형이라 부릅니다. 그런데 아까 위에서 컴퓨터와 '프로그래밍 언어'를 함께 언급했었죠. 컴퓨터와 사람사이에서 언어를 통역해주는 프로그래밍 언어(여기서는 파이썬이 되겠죠) 또한 개념 자체는 다르지 않습니다. 다만 통역을 시도할 때 프로그래밍 언어마다 정해진 룰 이 다르기 때문에, 각 언어마다 자료형의 설정이 약간 씩 다르게 제공 되기도 합니다. 예를 들면 C나 Java에서는 실수(소수점이 있는 수)를 취급할 때 Float이나 Double 형태로 소숫점 자리의 길이에 따라 다르게 취급하지만, 파이썬에서는 실수를 모두 float으로 통일해서 취급합니다. 물론 이것 말고도 자료형 측면에서 많은 차이가 있으며, 이런 특징으로 인해 프로그래밍 언어 마다 장단점이 존재하긴 한다만, 여기서는 굳이 알 필요는 없을 것 같습니다. (그래도 좀 더 파...