forked from UWPCE-PythonCert/ProgrammingInPython
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCollectionsModule.html
More file actions
190 lines (170 loc) · 13.6 KB
/
CollectionsModule.html
File metadata and controls
190 lines (170 loc) · 13.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
<!DOCTYPE html>
<html class="writer-html5" lang="en" >
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>The Collections Module — Programming in Python 7.0 documentation</title>
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../_static/css/theme.css" type="text/css" />
<!--[if lt IE 9]>
<script src="../_static/js/html5shiv.min.js"></script>
<![endif]-->
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script>
<script src="../_static/doctools.js"></script>
<script src="../_static/js/theme.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="next" title="Comprehensions Lab" href="../exercises/comprehensions_lab.html" />
<link rel="prev" title="Comprehensions" href="Comprehensions.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" style="background: #4b2e83" >
<a href="../index.html">
<img src="../_static/UWPCE_logo_full.png" class="logo" alt="Logo"/>
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<p class="caption" role="heading"><span class="caption-text">Topics in the Program</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="../topics/01-setting_up/index.html">1. Setting up your Environment</a></li>
<li class="toctree-l1"><a class="reference internal" href="../topics/02-basic_python/index.html">2. Basic Python</a></li>
<li class="toctree-l1"><a class="reference internal" href="../topics/03-recursion_booleans/index.html">3. Booleans and Recursion</a></li>
<li class="toctree-l1"><a class="reference internal" href="../topics/04-sequences_iteration/index.html">4. Sequences and Iteration</a></li>
<li class="toctree-l1"><a class="reference internal" href="../topics/05-text_handling/index.html">5. Basic Text Handling</a></li>
<li class="toctree-l1"><a class="reference internal" href="../topics/06-exceptions/index.html">6. Exception Handling</a></li>
<li class="toctree-l1"><a class="reference internal" href="../topics/07-unit_testing/index.html">7. Unit Testing</a></li>
<li class="toctree-l1"><a class="reference internal" href="../topics/08-dicts_sets/index.html">8. Dictionaries and Sets</a></li>
<li class="toctree-l1"><a class="reference internal" href="../topics/09-files/index.html">9. File Handling</a></li>
<li class="toctree-l1"><a class="reference internal" href="../topics/10-modules_packages/index.html">10. Modules and Packages</a></li>
<li class="toctree-l1"><a class="reference internal" href="../topics/11-argument_passing/index.html">11. Advanced Argument Passing</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="../topics/12-comprehensions/index.html">12. Comprehensions</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="Comprehensions.html">Comprehensions</a></li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">The Collections Module</a></li>
<li class="toctree-l2"><a class="reference internal" href="../exercises/comprehensions_lab.html">Comprehensions Lab</a></li>
<li class="toctree-l2"><a class="reference internal" href="../exercises/mailroom/mailroom_with_comprehensions.html">Mailroom With Comprehensions</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../topics/13-intro_oo/index.html">13. Intro to Object Oriented Programing</a></li>
<li class="toctree-l1"><a class="reference internal" href="../topics/14-magic_methods/index.html">14. Properties and Magic Methods</a></li>
<li class="toctree-l1"><a class="reference internal" href="../topics/15-subclassing/index.html">15. Subclassing and Inheritance</a></li>
<li class="toctree-l1"><a class="reference internal" href="../topics/16-multiple_inheritance/index.html">16. Multiple Inheritance</a></li>
<li class="toctree-l1"><a class="reference internal" href="../topics/17-functional_programming/index.html">17. Introduction to Functional Programming</a></li>
<li class="toctree-l1"><a class="reference internal" href="../topics/18-advanced_testing/index.html">18. Advanced Testing</a></li>
<li class="toctree-l1"><a class="reference internal" href="../topics/99-extras/index.html">19. Extra Topics</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" style="background: #4b2e83" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../index.html">Programming in Python</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content style-external-links">
<div role="navigation" aria-label="Page navigation">
<ul class="wy-breadcrumbs">
<li><a href="../index.html" class="icon icon-home"></a> »</li>
<li><a href="../topics/12-comprehensions/index.html"><span class="section-number">12. </span>Comprehensions</a> »</li>
<li>The Collections Module</li>
<li class="wy-breadcrumbs-aside">
<a href="../_sources/modules/CollectionsModule.rst.txt" rel="nofollow"> View page source</a>
</li>
</ul><div class="rst-breadcrumbs-buttons" role="navigation" aria-label="Sequential page navigation">
<a href="Comprehensions.html" class="btn btn-neutral float-left" title="Comprehensions" accesskey="p"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
<a href="../exercises/comprehensions_lab.html" class="btn btn-neutral float-right" title="Comprehensions Lab" accesskey="n">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
</div>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<div class="section" id="the-collections-module">
<span id="collections-module"></span><h1>The Collections Module<a class="headerlink" href="#the-collections-module" title="Permalink to this headline"></a></h1>
<p>Python has a very complete set of built in standard types that support most programming tasks. These include strings and numbers, and also types that can be used to hold other objects – or “collection” types.</p>
<ul class="simple">
<li><p>tuples</p></li>
<li><p>lists</p></li>
<li><p>dictionaries</p></li>
</ul>
<p>You can get pretty darn far with just these basic types – but some problems require (or could be helped by) more complex collection types.</p>
<p>This was recognised by the Python development team, so a number of genreally useful collection types are provided in the collections module.</p>
<div class="section" id="id1">
<h2>The collections module<a class="headerlink" href="#id1" title="Permalink to this headline"></a></h2>
<p>The first step is to see what’s there by looking at the documentation:</p>
<p><a class="reference external" href="https://docs.python.org/3/library/collections.html">https://docs.python.org/3/library/collections.html</a></p>
<p>You can see a pretty nice list of options (kind of in order of usefulness)</p>
<ul class="simple">
<li><p><code class="docutils literal notranslate"><span class="pre">namedtuple()</span></code>: factory function for creating tuple subclasses with named fields</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">deque</span></code>: list-like container with fast appends and pops on either end</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">Counter</span></code>: dict subclass for counting hashable objects</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">OrderedDict</span></code>: dict subclass that remembers the order entries were added</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">defaultdict</span></code>: dict subclass that calls a factory function to supply missing values</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">ChainMap</span></code>: dict-like class for creating a single view of multiple mappings</p></li>
</ul>
<p>These are just the regular builtin types, but in a form that they can be subclassed – to make your own custom version.</p>
<ul class="simple">
<li><p><code class="docutils literal notranslate"><span class="pre">UserDict</span></code>: wrapper around dictionary objects for easier dict subclassing</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">UserList</span></code>: wrapper around list objects for easier list subclassing</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">UserString</span></code>: wrapper around string objects for easier string subclassing</p></li>
</ul>
<p>To get an idea what these all are, read the docs, or a nice overview Python Module of the Week:</p>
<p><a class="reference external" href="https://pymotw.com/3/collections/">https://pymotw.com/3/collections/</a></p>
</div>
<div class="section" id="using-the-collection-types">
<h2>Using the collection types<a class="headerlink" href="#using-the-collection-types" title="Permalink to this headline"></a></h2>
<p>To use these special types, they must be imported:</p>
<div class="highlight-ipython notranslate"><div class="highlight"><pre><span></span><span class="gp">In [4]: </span><span class="kn">from</span> <span class="nn">collections</span> <span class="kn">import</span> <span class="n">defaultdict</span>
</pre></div>
</div>
<p>Then you can use it – creating a <code class="docutils literal notranslate"><span class="pre">defaultdict</span></code> with a empty list as a default:</p>
<div class="highlight-ipython notranslate"><div class="highlight"><pre><span></span><span class="gp">In [8]: </span><span class="n">dd</span> <span class="o">=</span> <span class="n">defaultdict</span><span class="p">(</span><span class="nb">list</span><span class="p">)</span>
<span class="gp">In [9]: </span><span class="n">dd</span><span class="p">[</span><span class="s1">'this'</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="mi">23</span><span class="p">)</span>
<span class="gp">In [10]: </span><span class="n">dd</span>
<span class="gh">Out[10]: </span><span class="go">defaultdict(list, {'this': [23]})</span>
<span class="gp">In [11]: </span><span class="n">dd</span><span class="p">[</span><span class="s1">'this'</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="mi">4</span><span class="p">)</span>
<span class="gp">In [12]: </span><span class="n">dd</span><span class="p">[</span><span class="s1">'this'</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="mi">4</span><span class="p">)</span>
<span class="gp">In [13]: </span><span class="n">dd</span>
<span class="gh">Out[13]: </span><span class="go">defaultdict(list, {'this': [23, 4, 4]})</span>
<span class="gp">In [14]: </span><span class="n">dd</span><span class="p">[</span><span class="s1">'that'</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="mi">4</span><span class="p">)</span>
</pre></div>
</div>
<p>And you’ll get a dict that will automatically put an empty list in when the key isn’t there yet. Kind of a handy replacement from having to call <code class="docutils literal notranslate"><span class="pre">dict.setdefault</span></code> each time.</p>
<p>Similarly for the others.</p>
<p>Take a bit of time to try them out – you may find them really useful.</p>
</div>
</div>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
<a href="Comprehensions.html" class="btn btn-neutral float-left" title="Comprehensions" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
<a href="../exercises/comprehensions_lab.html" class="btn btn-neutral float-right" title="Comprehensions Lab" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
</div>
<hr/>
<div role="contentinfo">
<p>© Copyright 2020, University of Washington, Natasha Aleksandrova, Christopher Barker, Brian Dorsey, Cris Ewing, Christy Heaton, Jon Jacky, Maria McKinley, Andy Miles, Rick Riehle, Joseph Schilz, Joseph Sheedy, Hosung Song. Creative Commons Attribution-ShareAlike 4.0 license.</p>
</div>
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>