forked from yasoob/intermediatePython
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathset_-_data_structure.html
More file actions
99 lines (87 loc) · 8.05 KB
/
Copy pathset_-_data_structure.html
File metadata and controls
99 lines (87 loc) · 8.05 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
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>set Data Structure</title>
<link rel="stylesheet" href="_static/epub.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
</head>
<body role="document">
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="ternary_operators.html" title="Ternary Operators"
accesskey="N">next</a></li>
<li class="right" >
<a href="map_&_filter.html" title="Map & Filter"
accesskey="P">previous</a> |</li>
<li class="nav-item nav-item-0"><a href="index.html">Python Tips 0.1 documentation</a> »</li>
</ul>
</div>
<div class="document">
<div class="documentwrapper">
<div class="body" role="main">
<div class="section" id="set-data-structure">
<h1><code class="docutils literal"><span class="pre">set</span></code> Data Structure</h1>
<p><code class="docutils literal"><span class="pre">set</span></code> is a really useful data structure. <code class="docutils literal"><span class="pre">sets</span></code> behave mostly like
lists with the distinction that they can not contain duplicate values.
It is really useful in a lot of cases. For instance you might want to
check whether there are duplicates in a list or not. You have two
options. The first one involves using a <code class="docutils literal"><span class="pre">for</span></code> loop. Something like
this:</p>
<div class="code python highlight-python"><div class="highlight"><pre><span class="n">some_list</span> <span class="o">=</span> <span class="p">[</span><span class="s">'a'</span><span class="p">,</span><span class="s">'b'</span><span class="p">,</span><span class="s">'c'</span><span class="p">,</span><span class="s">'b'</span><span class="p">,</span><span class="s">'d'</span><span class="p">,</span><span class="s">'m'</span><span class="p">,</span><span class="s">'n'</span><span class="p">,</span><span class="s">'n'</span><span class="p">]</span>
<span class="n">duplicates</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">some_list</span><span class="p">:</span>
<span class="k">if</span> <span class="n">some_list</span><span class="o">.</span><span class="n">count</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> <span class="o">></span> <span class="mi">1</span><span class="p">:</span>
<span class="k">if</span> <span class="n">value</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">duplicates</span><span class="p">:</span>
<span class="n">duplicates</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
<span class="k">print</span><span class="p">(</span><span class="n">duplicates</span><span class="p">)</span>
<span class="c"># Output: ['b', 'n']</span>
</pre></div>
</div>
<p>But there is a simpler and more elegant solution involving <code class="docutils literal"><span class="pre">sets</span></code>. You
can simply do something like this:</p>
<div class="code python highlight-python"><div class="highlight"><pre><span class="n">some_list</span> <span class="o">=</span> <span class="p">[</span><span class="s">'a'</span><span class="p">,</span><span class="s">'b'</span><span class="p">,</span><span class="s">'c'</span><span class="p">,</span><span class="s">'b'</span><span class="p">,</span><span class="s">'d'</span><span class="p">,</span><span class="s">'m'</span><span class="p">,</span><span class="s">'n'</span><span class="p">,</span><span class="s">'n'</span><span class="p">]</span>
<span class="n">duplicates</span> <span class="o">=</span> <span class="nb">set</span><span class="p">([</span><span class="n">x</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">some_list</span> <span class="k">if</span> <span class="n">some_list</span><span class="o">.</span><span class="n">count</span><span class="p">(</span><span class="n">x</span><span class="p">)</span> <span class="o">></span> <span class="mi">1</span><span class="p">])</span>
<span class="k">print</span><span class="p">(</span><span class="n">duplicates</span><span class="p">)</span>
<span class="c"># Output: set(['b', 'n'])</span>
</pre></div>
</div>
<p>Sets also have a few other methods. Below are some of them.</p>
<p><strong>Intersection</strong></p>
<p>You can intersect two sets. For instance:</p>
<div class="code python highlight-python"><div class="highlight"><pre><span class="n">valid</span> <span class="o">=</span> <span class="nb">set</span><span class="p">([</span><span class="s">'yellow'</span><span class="p">,</span> <span class="s">'red'</span><span class="p">,</span> <span class="s">'blue'</span><span class="p">,</span> <span class="s">'green'</span><span class="p">,</span> <span class="s">'black'</span><span class="p">])</span>
<span class="nb">input</span> <span class="o">=</span> <span class="nb">set</span><span class="p">([</span><span class="s">'red'</span><span class="p">,</span> <span class="s">'brown'</span><span class="p">])</span>
<span class="k">print</span><span class="p">(</span><span class="nb">input</span><span class="o">.</span><span class="n">intersection</span><span class="p">(</span><span class="n">valid</span><span class="p">))</span>
<span class="c"># Output: set(['red'])</span>
</pre></div>
</div>
<p><strong>Difference</strong></p>
<p>You can find the invalid values in the above example using the
difference method. For example:</p>
<div class="code python highlight-python"><div class="highlight"><pre><span class="n">valid</span> <span class="o">=</span> <span class="nb">set</span><span class="p">([</span><span class="s">'yellow'</span><span class="p">,</span> <span class="s">'red'</span><span class="p">,</span> <span class="s">'blue'</span><span class="p">,</span> <span class="s">'green'</span><span class="p">,</span> <span class="s">'black'</span><span class="p">])</span>
<span class="nb">input</span> <span class="o">=</span> <span class="nb">set</span><span class="p">([</span><span class="s">'red'</span><span class="p">,</span> <span class="s">'brown'</span><span class="p">])</span>
<span class="k">print</span><span class="p">(</span><span class="nb">input</span><span class="o">.</span><span class="n">difference</span><span class="p">(</span><span class="n">valid</span><span class="p">))</span>
<span class="c"># Output: set(['brown'])</span>
</pre></div>
</div>
<p>You can also create sets using the new notation:</p>
<div class="code python highlight-python"><div class="highlight"><pre><span class="n">a_set</span> <span class="o">=</span> <span class="p">{</span><span class="s">'red'</span><span class="p">,</span> <span class="s">'blue'</span><span class="p">,</span> <span class="s">'green'</span><span class="p">}</span>
<span class="k">print</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="n">a_set</span><span class="p">))</span>
<span class="c"># Output: <type 'set'></span>
</pre></div>
</div>
<p>There are a few other methods as well. I would recommend visiting the
official documentation and giving it a quick read.</p>
</div>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="footer" role="contentinfo">
© Copyright 2015, Muhammad Yasoob Ullah Khalid.
</div>
</body>
</html>