yoonji.log
로그인
yoonji.log
로그인
[파이썬 코딩의 기술] - 12. 스트라이드와 슬라이스를 한 식에 함께 사용하지 말라.
Dreamer
·
2021년 6월 30일
팔로우
1
1
1. 스트라이드(stride)
리스트[시작:끝:증가값]으로 일정한 간격을 두고 슬라이싱 할 수 있음.
시퀀스를 슬라이싱하면서 매 n번째 원소만 가져올 수 있다.
2. 스트라이드(stride) 단점
2-1. 버그 발생
바이트 문자열/ 유니코드 문자열에선 스트라이드 기법이 잘 작동한다.
하지만 유니코드 데이터를 'utf-8'로 인코딩한 문자열에서는 작동하지 않는다.
'utf-8' 인코딩 바이트 문자열 코드에서 2바이트 이상으로 이뤄졌던 문자들은 코드가 깨지기 때문에, 다시 디코딩할 수는 없다.
단, 모든 문자가 아스키 코드 범위에 들어가는 문자라면 아무 문제가 없을 수도 있다.
2-2. 코드 밀도 상승
x[::2] : 시작부터 매 두 번째 원소를 선택
x[::-2] : 끝에서 시작해 앞으로 가면서 매 두 번째 원소 선택
슬라이싱 구문에 스트라이딩까지 들어가면 코드 밀도 올라가서 읽기 어려움.
3.제안
3-1. 스트라이딩 한 결과를 변수에 대입한 다음 슬라이싱 하라!
스트라이드로 데이터를 줄인 후에 원하는 데이터 구간을 슬라이싱(얕은 복사)
3-2. 성능이 필요할 때엔 itertools.islice() 사용하라!
islice(iterable객체,start, stop,step)의 함수
첫 번째 매개 변수 : 반복 가능한 객체
두 번째 매개 변수 : start, 시작 위치
세 번째 매개 변수 : stop, 끝 위치
네 번째 매개 변수 : step, 각 반복 후에 건너 뛸 단계
참고
1. 아스키코드(ASCII)
최초의 문자열 인코딩
아스키 코드는 모든 문자 하나가 1byte를 차지한다.
영어, 숫자, 부호 등
128개
의 문자를
1바이트
로 표현하도록 구성된 코드.
아스키 코드만으로는 한글이나 일어 등의 다른 문자를 표시할 수 없다.
따라서 각 언어권에서 영어 외의 문자를 정의하는 코드 생김.
2. 멀티바이트 코드(ISO-2200)
아스키 문자 코드에다가 다른 문자(
2byte
)들을 포함한 문자 집합.
특정 문자 집합마다의 코드 페이지가 존재
(한글 코드 페이지로 해석하면 한글이 나오지만, 일어 코드 페이지로 해석하면 일어가 나온다.)
그래서 종종 깨지는 문자 발생
3. 유니코드 (국제 표준)
인코딩이 아님!
유니코드를 인코딩 하기 위해 UTF-8, UTF-16 탄생!!
이를 해결하기 위해 탄생!
아스키 문자 코드 뿐만 아니라, 한글, 일어 등등 어떠한 문자들을 총 망라하여
각 한 문자에 2byte
씩으로 할당하여 만든 문자 집합
각각의 특정 문자는 고유의 유니코드값을 가짐
.
4. ANSI(American National Standard Institute)
8bit로 구성되어 있으며, 256개의 문자
를 표현할 수 있다.
ASCII 코드에서 1bit를 더 사용한 것이기 때문.
ANSI의 앞 7bit는 ASCII와 동일하고, 뒤에 1bit를 이용하여 다른 언어의 문자를 표현함.
CodePage: 각 언어별로 code 값을 주고, Code마다 다른 문자열 표를 의미하도록 약속함.
즉,
ANSI = ASCII(7bit) + CodePage(1bit)
CodePage가 다를 경우 의도와 다른 결과가 나올 수 있다.
5. EUC-KR(Extended Unix Code-Korea)
한글 지원을 위해 유닉스 계열에서 나온 완성형 코드 조합.
즉, 문자 하나하나마다 코드 번호를 부여함.
반대되는 걔념으로 조합형 코드 : 한글의 자음/모음에 코드 번호 부여 후 초,중,종성을 조합하여 하나의 문자를 나타내는 방식
EUC-KR은 ANSI를
한국에서 확장한 것
으로 외국에서 지원 가능성 낮음.
2byte 완성형 코드로, 2byte 내에서 표현할 수 있는 완성된 문자의 수는 한계가 있음.
6. CP949(Code Page 949)!!!
한글 지원을 위해 윈도우즈 계열에서 나온 확장 완성형 코드 조합.
949는 한국, 932는 일본, 936은 중국어 간체.
EUC-KR과 호환
되며, 표현이 되지 않는 문자는 조합을 하여 표현함.
7. UTF-8(Universal Coded Character Set + Transformation Format -8bit)
유니코드를 위한 가변 길이 문자 인코딩(멀티바이트) 방식 중 하나로, ANSI의 단점을 보호하기 위해 만들어짐.
멀티바이트(1~4byte)로 최대 1,112,064자까지 표현 가능
첫 128자는 ASCII 코드 값으로 ANSI, UTF-8이 동일
영어 : 1byte
중동지역, 유럽 언어 : 2byte
한국,중국,일본 등 : 3byte 이상 사용 (비효율적)
8. UTF-16
한글을 2bytes, 용량의 이점이 있을 수 있다.
ANSI와 호환이 안됨.
9. UTF-32
모든 문자를 4bytes로 인코딩.
매우 비효율적.
Dreamer
To be a changer who can overturn world
팔로우
이전 포스트
[파이썬 코딩의 기술] - 11. 시퀀스를 슬라이싱 하는 방법을 익혀라
다음 포스트
[파이썬 코딩의 기술] - 19. 함수가 여러 값을 반환하는 경우 절대로 네 값 이상을 언패킹하지 말라
0개의 댓글
댓글 작성