본문 바로가기

파이썬14

리스트에서 중복을 제거하기. 리스트에서 어떤 중복된 값을 제거해야할 때, 주로 for문을 사용해 왔다. 그러나 코드가 길어지고 별도의 리스트를 생성해야 하는 단점이 있었다. 이번에 간결한 방법을 알게되어 소개한다. # 기존 사용방법 mylist = ["a", "b", "a", "c", "c"] new_list = [] for i in mylist: if i not in new_list: new_list.append(i) mylist = new_list print(mylist) >>> ['a', 'b', 'c'] 아래는 더 간결한 새로운 방법이다. mylist = ["a", "b", "a", "c", "c"] mylist = list(dict.fromkeys(mylist)) print(mylist) >>>["a", "b", "c"] .. 2022. 8. 23.
0으로 초기화된 2-차원 리스트 생성하기. 프로그래밍 문제를 풀다 보면, 0으로 초기화된 2차원 리스트를 만들어야 할 때가 종종 있다. 여러가지 방법이 있겠지만, 안 좋은 예 2가지와 좋은 예 한가지를 소개한다. 예시1(좋음) #시간이 오래걸리는 경우 N = 10 ** 4 arr = [[0] * N for _ in range(N)] 예시2(시간이 느림) #시간이 오래걸리는 경우 N = 10 ** 4 arr = [[0 for _ in range(N)] for _ in range(N)] 예시3(예상하지 못한 결과가 발생함) #참조를 잘못한 예 N = 10 ** 4 arr = [[0] * N] * N 먼저 간단하게, time라이브러리를 이용하여 시간을 측정해보자. 예시1(좋음) #time 라이브러리 임포트 import time #생성 전 시간 변수저장.. 2022. 6. 28.
백준 1307:마방진 코드수정 마방진 에서 데코레이터 부분 및 타입 어노테이션, 독스트링등을 작성하였다. map에 들어가는 함수에 parameter가 두개가 필요한데, 하나만 쓰는 방법만 알고 여러개를 사용하는 방법을 몰라서 새로 공부해서 적용해 보았다. functools.partial에서 d를 고정으로 적용하였더니 작동했다. def iterize(function): def wrapper(x, d): if isinstance(x, list): return list(map(functools.partial(wrapper, d=d), x)) else: return function(x, d) return wrapper @iterize def magic_plus(x, d): return x + ((N // 2) ** 2) * d import .. 2022. 6. 19.
1307:마방진 풀기 3, 4일차 결론적으로 풀었다! 그런데 아직 해야할 문제가 많이 남아있다.. 일단 코드가 너무 길고, 성능이 엄청 딸리진 않는데, 개선의 부분이 있을 것 같다. 제대로 만드려면 모든 마방진을 구현할 수 있는 알고리즘이 필요한데 그게 의문이다. 현재로써는 단순히 n을 넣으면 n * n에 해당하는 마방진 단 하나가 나오는데, 4 * 4는 880개의 마방진이 존재하고, 5 * 5 는275,305,224개가 존재한다니 참으로 엄청날 수가 없다. 모든 경우의 수를 제공 할 순 없겠지만, 100개정도는 랜덤으로 제공해야 제대로 된 알고리즘이 될거라고 생각한다. 아니면 차원을 높여서 3d구조의 마방진을 만드는것도 나쁘지 않을 것 같다. 그리고 1일차에 소개한 논문의 strachey 알고리즘이 끝까지 소개되어 있지 않은 상태였다... 2022. 6. 16.