python에서 dictionary가 어떻게 구현되었을까요? 아니 그 전에 최악의 경우에 뭔가를 찾는 연산은 O(n)일까요? insert 하는 연산도? 사실, 저는 자바에서 본 것 처럼 그냥 chaining 으로 관리하지 않을까 싶었는데 그건 아니였습니다. 니다. 제 무지함이 또. 그 전에, 정말 최악의 경우에 insert나 find 연산 등이 비효율적으로 동작할까? 에 대한 의문부터 해결해 봅시다. 최악의 경우를 인위적으로 만드는 방법은 그리 어렵지 않습니다. 어디까지나 인위적으로 조작할 뿐, 실제로 제가 출제한 문제에서 최악 케이스를 만드는 건 쉽지 않습니다. 왜냐하면, python에서 int object가 모든 hashcode 값이 0일 리는 없기 때문입니다. 이에 대한 건 나중에 언급하도록 하겠습..
Dict 검색 결과
안녕하세요. 조가희입니다. 이번 시간에는 제가 가희 코테를 열면서 풀이를 검증했을 때 사용해서 편리했던 defaultdict에 대해 알아보도록 하겠습니다. 먼저, 아래 프로그램을 봅시다. 처음에 1번 키가 있고, value 값이 빈 리스트입니다. 그리고 1번 key의 value 값에 append(2)를 합니다. 그러면 1번 키는 2만 들어가 있는 리스트에 대응될 겁니다. 1번째 줄에서 dic은 위와 같이 되어 있습니다. 2번째 줄이 수행되고 나서, key 1에 대응되는 것은 2가 들어 있는 list일 테니, {1: [2]}가 출력될 겁니다. 문제는 그 다음에 키 2에 있는 값에 접근한다는 것입니다. 그런데, 이것은 dic에 없는 키입니다. 따라서, KeyError가 뜹니다. 실행 결과는 위와 같습니다. ..
파이썬에는 dict와 OrderedDict가 있습니다. 이 둘에 대해 간단하게 알아봅시다. 아래 코드를 wandbox에서 python 3.5.0에서 실행시켜 보았습니다. 2번째 줄이 조금 길어보이는데요. 그리 어렵지 않습니다. ord('A')와 ord('Z')는 'A'와 'Z'를 코드로 변환시켜 줍니다. 그러면 i는 'A'의 코드값부터 'Z'의 코드값까지 돌 겁니다. 그런데, 앞에 chr(i)가 있으니, 결론적으로 li는 'A'부터 'Z'까지 들어가 버리게 됩니다. 3번째 줄에서는 li 안에 있는 것들을 돌면서, 'A', 'B', ... , 'Z' 순서대로 넣고 있습니다. 다음에, 5번째 줄에서는 dic를 순회하면서 요소들을 모두 출력합니다. 결과는 위와 같습니다. 중요한 것은 넣은 순서가 자료구조 내에..
최근댓글