Python Tutorial, Release 3.9.5 (continued from previous page) Traceback (most recent call last): File "<stdin>" , line1, in <module> d['primary'] # entry was automatically removed File "C:/python39/lib/weakref.py" , line46 , in __getitem__ o =self.data[key]() KeyError : 'primary' 11.7 Tools for Working with Lists Many data structure needs can be met with the built-in list type. However, sometimes there is a need for alternative implementations with different performance trade-offs. The$_{array}$ module provides an$_{array()}$ object that is like a list that stores only homogeneous data and stores it more compactly. The following example shows an array of numbers stored as two byte unsigned binary numbers (typecode "H" ) rather than the usual 16 bytes per entry for regular lists of Python int objects: The$_{collections}$ module provides a$_{deque()}$ object that is like a list with faster appends and pops from the left side but slower lookups in the middle. These objects are well suited for implementing queues and breadth first tree searches: >>> from array import array >>> a =array('H ', [4000 ,10 ,700 ,22222 ]) >>> sum(a) 26932 >>> a[1:3] array('H', [10, 700]) >>> from collectionsimport deque >>> d =deque(["task1","task2","task3"]) >>> d.append( "task4") >>> print("Handling", d.popleft()) Handling task1 unsearched =deque([starting_node]) def breadth_first_search(unsearched): node =unsearched.popleft() for m in gen_moves(node): if is_goal(m): return m unsearched.append(m) >>> import bisect >>> scores =[(100 ,'perl'), ( 200 ,'tcl'), ( 400 ,'lua'), ( 500 ,'python')] >>> bisect.insort(scores, ( 300 ,'ruby')) >>> scores [(100, 'perl'), (200, 'tcl'), (300, 'ruby'), (400, In addition to alternative list implementations, the library also offers other tools such as the$_{bisect}$ module with functions for manipulating sorted lists: The$_{heapq}$ module provides functions for implementing heaps based on regular lists. The lowest valued entry is always kept at position zero. This is useful for applications which repeatedly access the smallest element but do not want to run a full list sort: >>> from heapq import heapify, heappop, heappush >>> data =[1,3,5,7,9,2,4,6,8,0] >>> heapify(data) # rearrange the list into heap order >>> heappush(data,-5) # add a new entry (continues on next page) 89 11.7. Tools for Working with Lists