언어
-
[Golang] 한글을 포함한 문자열 길이 자르기언어/Golang 2016. 10. 12. 14:24
한글 단어 길이를 제한을 두어 제한치를 넘어가는 글자를 자르는 함수를 설명하겠습니다.링크 에서 설명한 것과 같이 GO에서 len()함수는 byte기반으로 동작하기 때문에 한글은 3바이트 씩 계산됩니다.아래와 같이 한글+숫자+영어가 섞여있는 문자열에서 글자 제한을 20자로 두어 그 이상 넘어가면 삭제하는 함수를 설명하겠습니다. func main() { vals := "가나다라마바사1234567890abcd" } 먼저 한글을 바이트로 변환시키면 다음과 같은 리스트를 볼 수 있습니다.func main() { vals := "가나다"b := []byte(vals) fmt.Println(b) } # [234 176 128 235 130 152 235 139 164]하나의 숫자 당 1byte로 한글은 3바이트이기 ..
-
[Golang] 전각문자(double byte)를 반각문자(single byte)로 변경언어/Golang 2016. 10. 12. 13:41
//전각문자(특수문자 등)과 같은 기호들을 일반 문자(반각문자)로 변경 func convertHalfwidth(str string) string { b := []byte(str) idx := 0 var buffer bytes.Buffer dataLength := utf8.RuneCountInString(str) for i := 0; i = 0xfee0 { val = val - 0xfee0 //특수기호 공백은 아래와 같이 다른 코드값을 가지므로 하드코딩 } e..
-
[Golang] 슬라이스 데이터 삭제 및 자리 시프트 바로 실행언어/Golang 2016. 10. 12. 13:39
슬라이스는 배열과 달리 크기가 동적이고 길이가 고정되어 있지 않아 아래의 방식이 가능하지만 배열의 경우 에러가 납니다.2개 이상의 데이터가 슬라이스에 존재한다고 가정하고 중간 데이터를 삭제를 하면 슬라이스의 중간에 빈 값이 존재하게 됩니다. 이러한 경우에 삭제한 데이터 뒤에 존재하는 데이터들을 앞으로 시프트 하는 방법을 아래 예시를 통해 설명하겠습니다.예) [32, 29, 78, 16, 81]의 데이터를 가지는 슬라이스에서 78번을 삭제한 다음, [16, 81]을 앞으로 한 칸씩 당겨야 하는 경우1. [32, 29, 78, 16, 81] - 78 삭제 2. [32, 29, null, 16, 81] - 78자리에 빈 값존재3. [32, 29 16, 81] - 이와 같이 삭제된 인덱스 다음 인덱스들의 자리를..
-
[Python] Tip - 이터레이터를 병렬로 처리하려면 zip을 사용언어/파이썬 & 장고 2016. 10. 9. 19:31
파이썬에서 관련 객체로 구성된 리스트를 많이 사용합니다. list comprehension을 사용하면 소스 리스트 (source list)에 표현식을 적용하여 파생 리스트(derived list)를 쉽게 얻을 수 있습니다.파생 리스트의 아이템과 소스 리스트의 아이템은 서로의 인덱스로 연관되어 있어 두 리스트를 병렬로 순회하려면 소스 리스트 길이만큼 순회하면 됩니다.names = ['cecilia', 'lise', 'marie'] letters = [len(n) for n in names] longest_name = None max_letters = 0 for i in range(len(names)): count = letters[i] if count > max_letters: longest_name = ..
-
[Python] Tip - comprehension이 클땐 제너레이터 표현식을 고려언어/파이썬 & 장고 2016. 10. 9. 17:36
list comprehension의 문제점은 입력 시퀀스에 있는 각 값 별로 아이템을 하나씩 담은 새 리스트를 통째로 생성한다는 점입니다. 입력이 적을 땐 상관없지만 커지면 메모리를 많이 소모해서 프로그램이 다운될 수도 있습니다.예를 들어 파일을 읽고 각 줄에 있는 문자의 갯수를 반환한다고 하면 해당 작업을 list comprehension로 실행하면 파일에 있는 각 줄의 길이만큼 메모리가 필요합니다. 파일에 오류가 있거나 끊김 없는 네트워크 소켓일 경우 list comprehension를 사용하면 문제가 발생합니다. 아래는 입력값이 적은 경우를 list comprehension로 처리한 예입니다.value = [len(x) for x in open ('/tmp/my_file.txt')] print(va..
-
[Python] Tip - list comprehension에서 표현식은 2개까지만언어/파이썬 & 장고 2016. 10. 9. 17:14
list comprehension은 다중 루프도 지원합니다. 예를 들어 2차원 행렬을 모든 셀이 포함된 평평한 리스트 하나로 간략화한다고 가정하면 다음 for 표현식 두 개를 사용해 표현할 수 있습니다.matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] flat = [x for row in matrix for x in row] print(flat) # 결과 # [1, 2, 3, 4, 5, 6, 7, 8, 9] 또 다른 사용법으로는 2차원 행렬의 각 셀에 있는 값의 제곱을 구한다는 가정합니다. 추가로 [] 문자를 사용하기 때문에 좋아보이진 않지만 이해하기는 쉽습니다.matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] squares = [[x**2 for x..
-
[Python] Tip - map과 filter 대신 list comprehension을 사용언어/파이썬 & 장고 2016. 10. 9. 16:53
파이썬에서는 한리스트에서 다른 리스트를 만들어내는 간결한 문법을 list comprehension이라 합니다.예를 들어 리스트에 있는 각 숫자의 제곱을 계산한다고 할 때 아래와 같이 코딩할 수 있습니다.a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] squares = [x**2 for x in a] print(squares) # 결과 # [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]간단한 연산에는 list comprehension이 내장 함수 map보다 명확합니다. map을 쓰려면 계산에 필요한 lambda 함수를 생성해야 해서 깔끔해 보이지 않습니다.squares = map(lambda x:x**2, a)map과 달리 list comprehension을 사용하면 ..
-
[Python] 데코레이터 (함수를 꾸미는 객체)언어/파이썬 & 장고 2016. 10. 7. 16:09
데코레이터는 __call__()메소드를 구현하는 클래스__call__() 메소드는 객체를 함수 호출 방식으로 사용하게 만드는 마법 메소드입니다.# -*- coding: utf-8 -*- class Call: def __call__(self): print("call") obj = Call() obj() # 인스턴스 뒤에 괄호 (와 )를 붙여 호출하면 내부적으로 __call__ 메소드가 호출됩니다. # 결과 # call 데코레이터는 자신이 수식할 함수나 메소드를 내부에 받아놓아야 합니다. 그러기 위해 데코레이터는 __init__()메소드의 매개변수를 통해 함수나 메소드를 넘겨받아 데이터 속성에 저장해둡니다.# -*- coding: utf-8 -*- class Deco: def __init__(self, f)..
-
[Python] 상속언어/파이썬 & 장고 2016. 10. 7. 15:05
상속class Base: def base_method(self): print("base_method") class Derived(Base): pass base = Base() base.base_method() derived = Derived() derived.base_method() # Derived 클래스가 스스로 구현한 메소드는 없지만 Base로부터무려받은 base_method()는 갖고 있음 코드를 재사용하기 위해선 상속보단 클래스의 인스턴스를 데이터 속성으로 갖는 것이 상속보다 더 나은 코드 재사용 방법이 될 수 있습니다. 이런 기법을 포함(containment)라고 합니다. 다음은 B클래스가 A클래스를 상속하는 대신 __init__() 메소드 안에서 A의 인스턴스를 자신의 데이터 속성으로 정의하..