"코딩을 잘하는 프로그래머라면 예외 처리를 잘해야 한다"라고 저에게 교수님께서 알려주셨던 것이 기억이 납니다.

 

그만큼 코딩하는데 있어서 예외처리는 굉장히 중요한 부분을 차지하고 있는데요, 만약 예외처리가 잘 안된 상태에서 서버를 돌리다가 예외가 발생하면 큰 문제가 발생할 수도 있기 때문입니다.

 

에러가 발생하는 원인은 원래 특정한 종류의 입력만 처리하도록 조건을 주어줬는데, 그에 맞지 않은 입력을 할 경우가 있습니다.

 

대표적으로 비밀번호를 예로 들어보겠습니다. 대문자, 소문자, 숫자, 특수기호(!#%^)를 모두 사용하여 8~16자리의 비밀번호 생성이라는 조건을 준 웹사이트를 가끔 보실 수 있으실 것입니다. 그렇다면 저 조건중에 한가지라도 빠지게 된다면 에러메세지를 보낸 뒤 다시 생성하라고 하는 경우를 경험하신 경우가 있으실 겁니다.

 

만약 저 상태에서 예외처리를 하지 않았다면 서버에 큰 문제가 발생하여 운영에 큰 어려움이 생길지도 있으므로 예외처리는 그만큼 중요하다고 생각합니다.

 

1. ValueError

다음은 문자를 소수로 바꿔주는 명령어 float를 사용하여 ValueType의 에러를 살펴볼까 합니다.

float안에는 ''안에 소수가 들어와야 정상적으로 결과가 나오는데, 만약 something같은 문자열을 입력한다면 다음과 같이 ValueError가 나오게 됩니다.

 

2. TypeError

이번에는 float안에 숫자를 적었지만, 튜플 형식으로 적어 넣어 TypeError이 발생하는 경우입니다.

3. Try, Except

위의 문제점을 해결하기 위해 Try, Except를 사용해 보겠습니다.

attempt_float()라는 함수를 그 안에 try와 except를 넣어줘서 try에서 에러가 발생할 경우 except에서 처리할 수 있도록 조치를 취했습니다.

 

여기서 except에 다시한번 더 조건을 줄 수 있는데 에러의 종류에 따라 처리방식을 달리 하고 싶은 경우 다음과 같이 써줍니다.

except옆에 ValueError를 입력하고 TypeError가 발생하니 바로 다음과 같이 결과가 나왔습니다.

 

여기서의 방법은 처음처럼 except옆에 아무것도 쓰지 않으면 모든 종류의 에러를 아래와 같이 처리할 것이며, 혹은 튜플형식으로 두가지 에러 조건을 넣어 다시 실행해 보겠습니다.

TypeError와 ValueError이 모두 정상적으로 처리가 된 것을 확인하실 수 있습니다.

 

4. Finally

Try블록이 성공적으로 수행되었는지 여부와 관계없이 실행시키고 싶은 코드는 finally블록을 이용하여 적어줍니다.

다음과 같이 try블록에서 수행 후 finally도 바로 실행된 것을 확인하실 수 있습니다.

파이썬에서 데이터를 불러왔을 때 문자가 깨져서 보이는 경우때문에 들어오신 경우 인코딩 형식에 문제가 있을 수 있습니다. 길지 않은 내용이니 천천히 읽어보시고 참고하시기 바랍니다.(해결방법은 맨 아래에 있습니다)

 

데이터 포맷은 크게 "텍스트 데이터"와 "바이너리 데이터"로 나눌 수 있습니다.

 

텍스트 데이터란 일반적으로 텍스트 에디터로 편집할 수 있는 데이터 포맷을 나타냅니다. 주로 일반적인 자연 언어(한국어, 영어 등)와 숫자 등으로 구성됩니다. 특수하게 줄바꿈과 탭 등의 제어 문자도 포함되어 있는데, 그 밖에는 모두 에디터에서 시각적으로 확인할 수 있는 데이터 형식입니다.

 

프로그래밍 언어의 소스코드도 텍스트 데이터라고 말할 수 있습니다. XML/JSON/YAML/CSV처럼 웹에서 주로 사용되는 데이터 포맷은 텍스트 데이터를 기반으로 합니다.

 

바이너리 데이터란 문자와 상관 없이 데이터를 사용할 수 있는 데이터 영역을 활용하는 데이터 형식입니다.

 

바이너리 데이터는 문자에 할당되는 영역 외의 영역도 사용하므로 일반적인 텍스트 에디터로는 열 수 없습니다. 또한 사람이 시각적으로 확인해도 의미를 알 수 없는 문자열로 표현됩니다. 이에 대한 예시를 살펴보겠습니다.

 

다음과 같이 a.bin에 data = 100이라는 내용과 a.txt에 100이라는 내용을 적은 후 저장해서 용량을 살펴보겠습니다.

a.bin 저장 화면
a.txt 저장 화면

 

그리고 나서 용량을 확인해 보니

a.bin의 용량은 1byte가 나왔고,

 

a.txt의 용량은 3byte가 나왔습니다.

 

똑같은 100을 표현하는데 있어 텍스트는 3byte, 바이너리는 1byte이므로 데이터를 저장하는데 있어 바이너리가 효율적이라는 것을 알 수 있습니다.

 

텍스트 데이터 및 바이너리 데이터의 장단점을 표로 비교해보면 다음과 같습니다.

데이터 종류 장점 단점
텍스트 데이터 텍스트 에디터가 있다면 편집할 수 있습니다. 또한 설명을 포함할 수 있으므로 가독성이 높습니다. 바이너리 데이터에 비해 크기가 큽니다.
바이너리 데이터 텍스트 데이터에 비해 크기가 작습니다. 텍스트 에디터로 편집할 수 없습니다. 어떤 바이트에 어떤 데이터가 있다고 정의해야 합니다.

오늘날의 CPU는 기억 매체의 용량이 큽니다. 즉 1byte를 처리하나 3byte를 처리하나 처리 속도에는 큰 차이가 없습니다. 따라서 누구나 열어볼 수 있고 편집할 수 있게 텍스트 데이터를 사용하는 것이 더 좋다고 생각합니다.

 

하지만 웹에서는 크기가 조금 크더라도 텍스트 데이터가 더 편리하기 때문에 더 많이 사용될 것 같지만, 사실 대부분이 바이너리 데이터를 사용합니다. 왜냐하면 이미지와 동영상 같은 파일은 용량이 크므로 최대한 서버의 부하를 줄이기 위해 크기를 압축해야 하기 때문입니다. 물론 텍스트 기반으로 하는 이미지 형식도 있지만 거의 사용되지 않습니다. 이미지 또한 이너리 형식을 사용하는 것이 훨씬 실용적이기 때문입니다.

 

시각적으로 확인할 수 있는 텍스트 데이터도 주의할 것이 있습니다. 바로 문자 인코딩입니다.

 

어떠한 데이터를 다운로드 받은 후 불러올 때 문자가 깨지는 경우를 보신적이 있으실텐데요. 데이터를 저장한 사람이 저장할 때 인코딩을 UTF-8 혹은 EUC_KR로 하냐에 따라 저장되는 데이터는 전혀 다르기 때문입니다.

 

그래서 EUC_KR로 저장을 했는데 불러올 때 UTF-8로 불러온다면 문자가 깨진듯한 현상을 볼 것입니다.

만약 그러하다면 UTF-8로 불러오신 분은 EUC_KR로 바꿔보신 후 다시 실행해보시고, EUC_KR로 불러오신 분은 UTF-8로 바꿔보신 후 다시 실행해보시면 해결이 잘 될수도 있으니 참고하시기 바랍니다.

 

최근에는 텍스트 데이터 기반으로 하는 데이터는 모두 UTF-8로 인코딩이 되어 있습니다. 이는 HTML5 표준에서 UTF-8을 사용하는 것을 권장하기 때문입니다. 하지만 한국에서는 아직도 EUC_KR을 사용하는 경우가 많기 때문에 이 부분에 주의하시기 바랍니다.

'Data organization > 개념정리' 카테고리의 다른 글

에러와 예외 처리  (0) 2021.02.17
함수란?(Function)  (0) 2021.02.12
Comprehension(리스트, 딕셔너리)  (0) 2021.02.12
파이썬 연산(집합)  (0) 2021.02.03
딕셔너리(Dictionary)  (0) 2021.02.03

함수는 파이썬에서 코드를 재사용하고 조직화하기 위한 가장 중요한 수단이다.

 

같은 일을 반복하거나 비슷한 코드를 한 번 이상 실행해야 할 것이 예상되면, 재사용 가능한 함수를 작성하는 것이 더 나을 것이다.

 

함수를 쉽게 설명하기 위해 옷을 판매하는 회사와 공장에 비유해보겠다.

 

일단 어느 한 회사가 옷을 생산하기 위해 공장에 OEM으로 주문을 넣었다고 생각을하자,,

 

회사는 옷을 가공하기 위한 자재를 직접 공장에 전달한다.

 

이 자재를 이용하여 공장에서는 설계에 맞게 옷을 제작하고 제작이 완성된 옷을 다시 회사에 넘기게 된다.

 

함수 역시 같은 원리이다. 함수에 필요한 변수를 넣어주고 조건문을 거쳐 나온 값을 return으로 받게 되는 것이다.

(이 때 함수는 파이썬 명령들의 집합과 연관된 이름을 지어 좀 더 가독성이 좋은 코드를 작성할 수 있도록 해준다.)

 

예를 들어 함수를 작성해보면 다음과 같다.

함수명은 calculator로 가독성이 좋아지도록 함수의 성질과 연관된 이름으로 지었다.

 

함수를 살펴보면 x, y, z=1.5로 되어있다.(x,y는 default값이 없고, z는 default값이 1.5)

 

그래서 첫 번째 (10, 20, z=3)이라는 변수를 calculator라는 함수에 넣어줬고 결과값으로 90을 얻었다.

 

계산을 해보면 z > 1이므로 3 * (10 + 20) = 90이 된다.

 

두 번째 변수(0.1, 0.4, z=1) 역시 z의 조건이 z는 1 이하이므로 1 / (0.1 + 0.4) = 2 라는 결과를 얻을 수 있었다.

 

그렇다면 함수에 변수를 넣는 방식을 4가지 더 실험을 해보았다.

 

1. 'z='을 없앤 경우

2. z의 변수를 기입하지 않은 경우

3. x=, y= 이라는 변수를 넣어준 경우

4. z를 맨 처음 그리고 x를 마지막에 넣은 경우

 

1번의 경우 'z='이라는 단어를 굳이 쓰지 않아도 같은 결과값을 얻을 수 있었다.

3 * (1 + 2) = 9로 결과값이 맞게 나왔다.

 

2번의 경우 z의 변수를 넣어주지는 않았지만 기존에 default값으로 1.5가 주어졌기 때문에 z=1.5로 계산되어 결과값을 얻었다.

1.5 * (10 + 20) = 45로 결과값이 맞게 나왔다.

 

3번의 경우 x=, y=이라고 다른 방식으로 넣었지만 역시나 3 * (1 + 2) = 9로 결과값이 맞게 나왔고

 

마지막 4번의 경우,

z를 맨 처음, x를 맨 마지막에 써줘도 변수명을 정확히 기입을 해주었기 때문에 그에 따른 값으로 결과값이 나왔다

1 / (2 + 3) = 0.2로 결과값이 맞게 나왔다.

 

위에서 공부한 내용을 바탕으로 실제 데이터 가공을 하기 위해 어떻게 사용되는지 살펴보자.

states에 불규칙한 대소문자 및 기호 그리고 띄어쓰기를 넣어두고 re라는 표준라이브러리를 불러온 후, 문자열을 가공해주는 함수를 만들었다.

 

strip()은 value안의 문자열에 있는 양쪽 끝에 있는 어쓰기를 제거해주고,

 

sub()에서 첫 번째 ('[!#?]')의 의미는 이 안의 기호 대신 두 번째 ('')로 대체하라는 의미이다. 즉, !#?의 기호를 없애라는 의미로 해석할 수 있다.

 

마지막으로 title()은 문자열이 시작하는 첫 번째 문자만 대문자, 나머지 문자는 전부 소문자로 만들어 주는 명령어이다.

 

states라는 리스트를 함수 clean_strings(states)로 실행하니 데이터가 깔끔하게 가공된 것을 알 수 있다.

Comprehension은 파이썬에서 많이 사용하는 기능이다.

 

왜냐하면 가독성이 좋기 때문이다.

 

가장 먼저 살펴볼 list comprehension의 형태는 result = [expr for val in collection if condition이며,

 

이를 for문으로 나타낸다면

 

result = []

for val in collection:

    if condition:

        result.append(expr)

 

위와 같이 result의 결과값은 같지만, 표현식은 comprehension이 훨씬 가독성이 좋은 것을 알 수 있다.

 

예를 들어 문자열 리스트에서 문자열의 길이가 2초과인 문자열만 추출하는 코딩을 한다면,

x.upper()는 x값을 대문자로 표시하라는 의미이며, strings안의 x를 추출해라 만약 len(x), 즉 문자열의 갯수가 2를 초과할 경우는 의미이며, 결과값은 문자열이 최소 3개 이상인 값으로 리스트가 만들어졌다.

 

이를 for문으로 사용한다면

 

result = []

for x in strings:

    if len(x) > 2:

        result.append(x)

print(result)

 

이런식으로 최소 5줄이 된다. 가독성 부분이나, 작성하는 부분이나 Comprehension이 더 편리하다.

 

하지만 처음에 익숙하지 않다면 Comprehension보다는 for문으로 충분히 연습을 한 후 Comprehension을 사용해야 코딩을 이해하는데 더 큰 도움이 될 것이다.

 

Comprehension은 리스트 말고도 딕셔너리에도 적용이 되는데, 형태는 다음과 같다

dict_comp = {key-expr : value-expr for value in collection if condition}

 

집합에서는 대괄호 대신 중괄호를 쓴다는 점만 빼면 리스트 Comprehension과 동일하다.

set_comp = {expr for value in collection if codition}

 

위에서 사용한 strings를 사용하여 집합으로 추출해보면,

집합은 간단하게 strings내의 문자열 갯수를 집합으로 추출했다.

 

이번에는 strings내의 값을 활용하여 딕셔너리 형태로 추출해보면,

enumerate를 활용하여 strings의 요소를 하나씩 빼올때마다 그 값을 key값으로 지정하고, 그에 대한 순서를 value값으로 지정하여 딕셔너리를 만들었다.

 

 

만약 리스트 안의 요소가 많이 있다면 눈으로 원하는 자료를 추출하는 것은 불가능 할 것이다. 다음은 조금 더 복잡한 list comprehension을 작성해보도록 하겠다.

all_data안에는 여러가지 이름이 들어있다.

 

하지만 여기서 원하는 데이터는 'e'가 두번 이상 들어간 이름을 찾기를 원하고

 

name.count('e') >= 2라는 조건을 주어 결과값을 name_of_interset에 추가하는 모습이다.

 

결과값은 'Steven'이라는 값이 추출되었고, 이는 우리가 찾던 결과값과 동일했다.

 

집합유일한 원소만 담는 정렬되지 않은 자료형이다.

 

사전과 유사하지만 값은 없고 키만 가지고 있다고 생각하면 된다.

 

1. 집합을 생성하는 2가지 방법

(첫 번째 방법은 대괄호 내 key값 없이 입력을 하는 방법이고, 두 번째 방법은 set([])내 입력을 하는 방법이다.)

 

2. 집합 역시 객체가 변경 불가능이여야 하므로, 리스트는 집합이 될 수 없다.

(my_data는 리스트이며, x는 집합이다. 아래와 같이 my_data와 x는 서로 같지 않다는 결과값이 나왔고(False), my_data를 튜플로 하여 my_set으로 설정해주니 x와 my_set은 같다는 결과값(True)이 나왔다.)

 

3. 파이썬 집합 연산

여기서 a와 b라는 집합이 있다고 가정을 하고 아래 표를 작성

함수 대체 문법 설명
a.add(x) N/A a에 원소 x를 추가
a.clear() N/A 모든 원소를 제거하고 빈 상태로 되돌린다.
a.remove(x) N/A a에서 원소 x를 제거
a.pop() N/A a에서 임의의 원소를 제거, 비어 있는 경우 KeyError를 발생시킴
a.union(b) a | b a와 b의 합집합
a.update(b) a |= b a에 a와 b의 합집합을 대입
a.intersection(b) a & b a와 b의 교집합
a.intersection_update(b) a &= b a에 a와 b의 교집합을 대입
a.difference a - b a와 b의 차집합
a.difference_update(b) a -= b a에 a와 b의 차집합을 대입
a.symmetric_difference(b) a ^ b a와 b의 대칭차집합
a.symmetric_difference_update(b) a ^= b a에 a와 b의 대칭차집합을 대입
a.issubset(b) N/A a의 모든 원소가 b에 속할 경우 True
a.issuperset(b) N/A a가 b의 모든 원소를 포함할 경우 True
a.isdisjoint(b) N/A a와 b 모두에 속하는 원소가 없을 경우 True

 

'Data organization > 개념정리' 카테고리의 다른 글

함수란?(Function)  (0) 2021.02.12
Comprehension(리스트, 딕셔너리)  (0) 2021.02.12
딕셔너리(Dictionary)  (0) 2021.02.03
자료형 함수  (0) 2021.01.28
리스트 활용 방법  (0) 2021.01.27

 

dict는 파이썬 내장 자료구조 중에서 가장 중요하다.

 

일반적으로는 해시맵 또는 연관 배열이라고 널리 알려져 있다.

 

딕셔너리는 유연한 크기를 가지는 키(key) - 값(value)쌍으로, 이 둘은 모두 파이썬 객체다.

 

1. 딕셔너리 생성 방법

빈 딕셔너리를 만들 경우 중괄호{}를 사용하여 만들어주고, 직접 입력시 key, value값을 :로 구별하여 입력해준다.

 

2. 딕셔너리에 key, value값 추가

기존에 만들어진 d1 딕셔너리에 값을 추가해 보도록 하겠다.

(key으로는 7, 5, 'dummy'를 추가하였고, value값으로는 'an integer', 'some value', 'another value'를 추가하였다.)

 

3. 딕셔너리에 key, value값 제거

del이나 pop을 이용하여 딕셔너리의 값을 제거할 수 있다.

(del을 이용하여 key값 중 5를 제거하였고, pop을 이용하여 'dummy'라는 key값을 제거하였다. del을 사용하여 제거했을 때는 반환값이 나오지 않지만, pop을 이용하면 제거된 key의 value값이 반환되어 진다.)

 

4. 딕셔너리 내 key값 확인

리스트나 튜플에서 사용했던 것 처럼 딕셔너리 내 key값을 확인 할 수 있다.

 

5. 딕셔너리의 이터레이터 성질

keys와 values 메서드는 각각 키와 값이 담긴 이터레이터를 반환한다. 키-값 쌍은 일정한 기준으로 정렬되어 있지 않지만, keys 메서드와 values 메서드에서 반환하는 리스트는 같은 순서를 가진다.

 

6. 이터레이터의 성질을 이용하여 딕셔너리 생성하기

딕셔너리는 2개의 튜플로 구성되어 있으므로 dict 함수가 2개짜리 튜플의 리스트를 인자로 받아서 사전을 생성하는 것이 가능하다.

(key_list와 value_list를 튜플의 리스트로 만들어 주었고, mapping_A라는 빈 딕셔너리에 for문을 이용하여 key-value값을 생성하였고, mapping_B는 dict 함수가 2개의 튜플 리스트 인자를 받아 딕셔너리를 생성한 모습이다.)

 

7. 딕셔너리 활용

words의 리스트를 정의 한 후, word in words로 풀어낸다면 'apple'부터 'book'까지 word라는 변수로 정의되어 for문에 적용이 된다.

 

이 때 letter의 변수 즉 첫 번째 단어인 apple을 예로 들면, word[0]은 apple의 맨 앞 스펠링인 'a'가 될 것이며, 

 

by_letter_A[letter]는 by_letter_A['a']를 의미한다. 그럼 key값이 'a'일 때 [word] = [apple]이고, 이것은  value값이 됨

 

word의 맨 앞 스펠링이 key값으로 설정되고 그 전체 단어가 리스트 된 value값으로 구성되어 딕셔너리를 완성한다.

 

8. 딕셔너리 내 key값의 조건

key값이 되려면 바뀌지 않는 객체 즉, 튜플과 같이 바뀌지 않는 객체로 구성되어야만 한다. 이를 기술적으로 해시 가능해야 한다라고도 표현한다.

 

만약 key값으로 list와 tuple이 온다면, 객체 변경 가능한 list는 key값으로 불가능하고, tuple은 가능하다.

'Data organization > 개념정리' 카테고리의 다른 글

Comprehension(리스트, 딕셔너리)  (0) 2021.02.12
파이썬 연산(집합)  (0) 2021.02.03
자료형 함수  (0) 2021.01.28
리스트 활용 방법  (0) 2021.01.27
튜플 생성 방법 및 분리 방법  (0) 2021.01.27

1. enumerate

이 함수는 순차 자료형에서 현재 아이템의 색인(index)을 함께 처리하고자 할 때 흔히 사용한다. 주로 사용하는 패턴은 순차 자료형에서 값과 그 위치를 dict에 넘겨주는 것이다.

(some_list라는 리스트와 mapping이라는 빈 dict를 만들어주고 enumerate함수를 사용하여 순서대로 mapping안에 자료를 넣는 함수이다. mapping[v]에서 v는 key값이 될 것이고, i는 value값이 된다.)

 

2. sorted

순차 자료형에 sorted함수를 사용하면 자료가 정렬되어 다시 반환된다.

(숫자의 경우 크기 순으로 다시 정렬되어 결과가 나오며, 문자의 경우 a-z순으로 정렬되어 결과가 나온다.)

 

3. zip

여러개의 리스트나 튜플 또는 다른 순차 자료형을 서로 짝지어서 튜플의 리스트를 생성한다.

(zip으로 묶어준 상태에서 print를 하면 결과값은 <zip at 0xdf8c5e4740>으로 나오므로 list를 함께 써줘야 한다)

만약 자료형의 크기가 다른 것을 넘겨받는다면 어떻게 될까?

(원래는 [('foo', 'one', False), ('bar', 'two', True), ('baz', 'three')]를 예상할 수도 있지만, 실제로는 가장 짧은 크기가 기준이 된다.)

zip함수는 enumerate와 함께 사용되기도 한다.

(i는 순차대로 0, 1, 2가 결과값이 되고, seq1, seq20번째, 1번째, 2번째 값이 i의 순서에 맞게 결과가 나오게 된다.)

zip함수를 사용하여 이렇게 짝지어진 순차 자료형을 다시 풀어낼 수도 있다. 이를 사용해서 리스트의 로우, 컬럼의 변환이 가능하다

(pitcher에는 3개의 튜플이 있고, 1개의 튜플에는 2개의 값이 있다. 각 튜플의 첫 번째 값은 first_names에 들어가고 두 번째 값은 last_names에 들어가게 된다.)

 

4. reversed

순차 자료형을 역순으로 가져온다.

(reversed를 쓸 때 가장 많이 하는 실수는 이것이 제너레이터라는 점을 잊어버리고 그냥 사용한다는 점이다. 꼭 list()나 for문으로 모든 값은 다 받아오기 전에는 순차 자료형을 생성하지 않는다는 점을 명심해야 한다.)

'Data organization > 개념정리' 카테고리의 다른 글

Comprehension(리스트, 딕셔너리)  (0) 2021.02.12
파이썬 연산(집합)  (0) 2021.02.03
딕셔너리(Dictionary)  (0) 2021.02.03
리스트 활용 방법  (0) 2021.01.27
튜플 생성 방법 및 분리 방법  (0) 2021.01.27

리스트는 튜플과 마찬가지로 순차 자료형이지만, 다른점은 내용의 변경이 가능하다는 점입니다.

 

1. 리스트 생성방법

1-1 대괄호'[]'을 사용하여 만들거나 튜플 함수에 list를 사용하여 리스트 함수로 변환시켜준다.

 

1-2 list함수는 이터레이터나 제너레이터 표현에서 실제 값을 모두 담기 위한 용도로도 자주 사용된다.

 

2. 리스트 추가 및 삭제, 변경, 검사

 

2-1 append를 사용하여 리스트 끝에 새로운 값을 추가(끝에 'dwarf'가 추가됨)

 

2-2 insert를 사용해 리스트 내 특정 위치 값을 추가(0이 첫번째, 1이 두번째이므로 두번째에 'red'가 추가됨)

 

2-3 pop을 이용해 특정 위치의 값을 반환하고 해당 값을 리스트에서 삭제

(0,1,2 -> 2는 세번째 요소를 의미하고 b_list에서 3번째 요소인 peekaboo가 반환됨과 동시에 사라졌다)

 

2-4 remove를 사용하여 요소 제거

(맨 뒤에 'foo'를 추가하면 맨 앞과 맨 뒤에 foo라는 값이 생기는데 이 때 remove('foo')를 한다면 앞에 있는 foo값이 제거된다.)

 

2-5 리스트 내 요소 검사(리스트 내 값이 있으면 True, 없으면 False가 출력된다)

 

2-6 리스트 합치기

 

2-7 리스트 연장(리스트 합치기의 경우 합치면 새로운 리스트를 생성하고 복사하지만, extend는 기존에 값에 추가이므로 연산 비용은 extend가 낮다.)

 

3. 리스트 정렬

 

3-1 리스트 정렬(숫자 크기대로 정렬해준다.)

 

3-2 리스트 문자열 길이 순으로 정렬(sort의 기능)

 

4. bisect

 

4-1 bisect모듈 활용 방법

bisect.bisect(c, 2)는 c리스트 내 정렬된 상태를 유지할 수 있는 최대 위치 즉, 1, 2, 2, 2 이후에 5번째에 들어갈 수 있으므로 결과값은 4(0부터 시작이므로)가 출력되고, bisect.bisect(c, 5)는 c리스트 내 5가 들어갈 수 있는 위치는 1, 2, 2, 2, 3, 4 이후인 7번째 위치이므로 결과값이 6이 출력된다. 마지막으로 bisect.insort(c, 6)은 바로 c리스트 내 6을 추가해준다.

 

5. 슬라이스

 

5-1 슬라이스로 리스트 값 추출(1:5는 2째부터 5번째 요소(마지막 5는 포함하지 않는다)를 추출)

 

5-2 슬라이스로 리스트 값 추가([3:4]는 0, 1, 2, 3 -> 4번째 요소이므로 4번째 요소에 6과 3이 추가된다)

 

5-3 슬라이스에서 숫자를 입력하지 않고 리스트 출력

seq[:5] ->1째부터 5번째 값까지 리스트 추출

seq[3:] -> 4번째부터 마지막 값까지 리스트 추출

seq[-4:] -> 뒤에서 4번째 값(6번째 값)부터 마지막 값까지 추출

seq[-6:-2] -> 뒤에서 6번째 값부터 뒤에서 2번째 값까지 추출

 

5-4 슬라이스 Step설정([::2] -> ":"는 전체요소를 의미하므로 처음부터 끝까지 '2'간격 위치의 값을 리스트로 추출, "-1"은 정렬을 역순으로 바꿔준다.)

'Data organization > 개념정리' 카테고리의 다른 글

Comprehension(리스트, 딕셔너리)  (0) 2021.02.12
파이썬 연산(집합)  (0) 2021.02.03
딕셔너리(Dictionary)  (0) 2021.02.03
자료형 함수  (0) 2021.01.28
튜플 생성 방법 및 분리 방법  (0) 2021.01.27

+ Recent posts