기술(Tech, IT)/파이썬(Python) 25

[Python] re.split()

우선 re.split(pattern, string) 을 분석해보자. 1. re : Python의 정규식 (regular expression) 모듈로 쉽게 얘기하면 패턴(pattern)을 인식할 때 용이한 함수와 클래스를 제공한다. 2. re.split(pattern, string) : 본격적으로 re.split() 함수를 알아보자면, 주어진 'string'을 'pattern'과 일치하는 부분을 기준으로 쪼개준다. 사용시에는 'import re'를 먼저 선언해줘야 하며, 아래 예시를 살펴보자. import re text = "CHAPTER 1: Intro to the story. CHAPTER 2: The journey begins." pattern_ = r'CHAPTER' output = re.split..

[Python] numpy ones

numpy.ones 함수는 '1'로 채워진 array를 생성할 때 사용된다. size(크기)와 shape(모양)은 매개변수를 어떻게 주느냐에 따라 결정된다. 하나씩 살펴보자. 'numpy.ones(shape, dtype=None, order = 'C')' shape: 하나 또는 연속되는 Integer를 통해 array의 shape을 정의한다. 예를 들어, (2, 3)이 주어진다면 2x3의 matrix가 생성된다. dtype: 데이터 타입을 설정하는 것으로 default는 'float64' order: 다차원의 데이터를 row-major(행, C-style), column-major(열, Fortran-style) 중 어떤 방식으로 저장할 것인지 결정한다. 사용 예시는 아래와 같다. 5의 길이를 갖는 1D..

[Python] set 함수(method, function)

set 역시 list를 비롯한 다른 collection과 마찬가지로 다루기 위한 함수들이 존재하고 대표적으로 사용되는 함수들은 아래와 같다. add(elem) : 요소 elem을 set에 추가 remove(elem) : 요소 elem을 set에서 제거하는데 존재하지 않을 수 KeyError 발생 discard(elem) : 요소 elem을 set에서 제거하지만 없어도 error는 발생하지 않음 pop() : 임의의 요소를 반화하면서 제거. set가 비어있다면 KeyError 발생 clear() : set의 모든 요소 제거 참고 - https://docs.python.org/3/library/stdtypes.html#set-types-set-frozenset

[Python] set (세트)

# set 선언 s = set() # list로 casting l = list(s) 파이썬 공식 사이트에 따른 set에 대한 설명은 아래와 같다. : set 객체는 해시 가능한 별개의 객체들의 정렬되지 않은 컬렉션(collection이다. 멤버십 확인, 배열에서 중복 제거, 교집합, 합칩합, 차집합, 대칭 합 같은 수학 연산 계산 등에 주로 사용된다. 다른 컬렉션과 마찬가지로 set는 x in set, len(set), for x in set를 지원한다. 정렬되지 않은 컬렉션이기에 set는 요소의 위치나 삽입 순서를 기록하지 않는다. 따라서 set는 index나 slice 또는 기타 순서에 대한 동작을 지원하지 않는다. 현재 기본 제공 set 유형에는 set와 frozenset 두 가지가 있다. set ..

[Python] Set(세트) vs List(리스트) 검색 속도 비교

변수나 자료형 등이 중복으로 나타나는지와 같은 확인을 위해 'in'이라는 키워드를 많이 사용한다. 이때 Set와 List 중 어떤 것을 사용하느냐에 따라 속도의 차이가 매우 커질 수 있다. Set가 List에 비해 일반적으로 빠른 성능을 보이는데 이는 Set가 Hash Table로 구현이 돼있는 반면, List는 배열로 구현돼있기 때문이다. Hash Table의 경우 검색(lookup), 삽입(isertion), 삭제(deletion)에 대해 O(1)의 시간 복잡도를 갖지만, 배열의 경우 O(n) 을 갖기 때문이다. 아래 코드를 통해 시간의 차이를 확인할 수 있다. import time my_list = list(range(1000000)) my_set = set(my_list) start_time = ..

[Python] 변수 간 복사(대입, copy)

파이썬에서 하나의 값을 갖는 일반적인 변수의 경우 간단하게 복사를 할 수 있지만, 리스트와 같은 경우는 복사 후 값을 변경하면서 생각지 못했던 상황에 맞닥뜨릴 수 있다. (1) 아래에 a의 경우 b가 a를 복사한 후 b의 값을 2로 변경해도 a의 값은 1로 유지가 된다. (2) l1의 경우 l2가 l1을 복사한 후 첫번째 요소를 4로 변경 후 l1을 출력하면 l1의 첫번째 요소 역시 4로 변경된 것을 확인할 수 있다. (3) String의 경우도 (1)과 같다. String의 경우 역시 t를 변경돼도 s가 "abc" 유지되는 것을 확인할 수 있다. 여기서 알아 두어야 하는 점은 int와 String은 immutable한 객체로 새로운 값이 할당되면 새로운 주소와 함께 갱신이 되기에 값을 복사한 객체가 변..

[Python] Two-Dimensional Array(2차원 배열)

매번 파이썬 2차원 배열 선언이 헷갈린다. 2차원 배열 선언은 아래와 같고, Shallow Copy(얕은 복사)를 주의해야한다. 우선 Shallow Copy를 고려하지 않은 일반적인 2차원 배열은 아래와 같이 선언한다. Array = [[0 for column in range(9)] for row in range(9)] 혹은 아래와 같이 선언할 수 도 있다. Array = [[0] * 9] for row in range(9)] 다음은 Shallow Copy를 적용한 2차원 배열 선언이다. Array = [[0] * 9 * 9] 위와 같이 2차원 배열을 선언할 경우, [0] * 9라는 배열을 그대로 복사해 생성하는 것으로 Array[0][0]의 값을 변경할 경우 Array[1][0]부터 Array[8][0..

[Python] 문자열 숫자인지 판별

LeetCode 문제 풀이 중 문자열로 구성된 배열(List)에서 꺼낸 문자열이 숫자인지 여부를 판별하기 위해 고민하던 중 찾아봤다. 1. 아스키 코드(ASCII) : 가장 떠오른 방법이다. 이 방법은 0부터 9까지, 즉 한 자리 숫자만 판별이 가능하다는 한계가 있다. 숫자를 따옴표 안에 넣어 직관적으로 조건문을 선언해도 되고 각각 숫자 0과 9의 아스키 코드 값인 48과 57로 선언해도 된다. 아래는 임의의 문자열 변수(string)를 통한 예다. if "0"

[Python] subscriptable: TypeError

파이썬 코드를 작성하던 중 아래와 같은 에러가 발생했다. : TypeError: 'int' object is not subscriptable 위 에러는 배열에 존재하지 하지 않는 구역에 접근하려고 할 때 발생하며, 예시는 아래와같다. arr = [1, 2, [3, 4]] print(arr[0][1]) 실행 결과: TypeError Traceback (most recent call last) in 1 arr = [1, 2, [3, 4]] ----> 2 print(arr[0][1]) TypeError: 'int' object is not subscriptable * subscript: 아래에 기입한, 아래와 적은 문자[숫자, 기호] 참고 - https://en.dict.naver.com/#/entry/enk..