{
    "componentChunkName": "component---src-templates-post-js",
    "path": "/python-idioms/",
    "result": {"data":{"markdownRemark":{"html":"<h1 id=\"python-idioms\" style=\"position:relative;\"><a href=\"#python-idioms\" aria-label=\"python idioms permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Python Idioms</h1>\n<p>In this post, we're going to look at some of the most useful Python idioms that can make your code shorter, cleaner, and easier to understand.</p>\n<p>Python is often described as an expressive language. Many tasks that require multiple lines of code in other languages can be written in a single line of Python.</p>\n<p>We'll explore some built-in features and standard library modules that every Python developer should know.</p>\n<h2 id=\"prerequisites\" style=\"position:relative;\"><a href=\"#prerequisites\" aria-label=\"prerequisites permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>PREREQUISITES</h2>\n<ul>\n<li>Familiarity with Python</li>\n<li>Basic understanding of loops and functions</li>\n</ul>\n<h2 id=\"goals\" style=\"position:relative;\"><a href=\"#goals\" aria-label=\"goals permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Goals</h2>\n<ul>\n<li>Learn common Python idioms</li>\n<li>Write cleaner and more concise code</li>\n<li>Become more comfortable with Python's standard library</li>\n</ul>\n<h2 id=\"list-comprehensions\" style=\"position:relative;\"><a href=\"#list-comprehensions\" aria-label=\"list comprehensions permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>List Comprehensions</h2>\n<p>Suppose we want a list containing the square of every number from 1 to 10.</p>\n<p>A beginner might write:</p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\">squares <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span>\n\n<span class=\"token keyword\">for</span> i <span class=\"token keyword\">in</span> <span class=\"token builtin\">range</span><span class=\"token punctuation\">(</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span> <span class=\"token number\">11</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    squares<span class=\"token punctuation\">.</span>append<span class=\"token punctuation\">(</span>i <span class=\"token operator\">*</span> i<span class=\"token punctuation\">)</span></code></pre></div>\n<p>This works perfectly fine.</p>\n<p>However, Python provides a more compact syntax called a <strong>list comprehension</strong>.</p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\">squares <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span>i <span class=\"token operator\">*</span> i <span class=\"token keyword\">for</span> i <span class=\"token keyword\">in</span> <span class=\"token builtin\">range</span><span class=\"token punctuation\">(</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span> <span class=\"token number\">11</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">]</span></code></pre></div>\n<p>The result is exactly the same.</p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token operator\">>></span><span class=\"token operator\">></span> squares\n<span class=\"token punctuation\">[</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span> <span class=\"token number\">4</span><span class=\"token punctuation\">,</span> <span class=\"token number\">9</span><span class=\"token punctuation\">,</span> <span class=\"token number\">16</span><span class=\"token punctuation\">,</span> <span class=\"token number\">25</span><span class=\"token punctuation\">,</span> <span class=\"token number\">36</span><span class=\"token punctuation\">,</span> <span class=\"token number\">49</span><span class=\"token punctuation\">,</span> <span class=\"token number\">64</span><span class=\"token punctuation\">,</span> <span class=\"token number\">81</span><span class=\"token punctuation\">,</span> <span class=\"token number\">100</span><span class=\"token punctuation\">]</span></code></pre></div>\n<p>We can even add conditions.</p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token operator\">>></span><span class=\"token operator\">></span> evens <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span>i <span class=\"token keyword\">for</span> i <span class=\"token keyword\">in</span> <span class=\"token builtin\">range</span><span class=\"token punctuation\">(</span><span class=\"token number\">20</span><span class=\"token punctuation\">)</span> <span class=\"token keyword\">if</span> i <span class=\"token operator\">%</span> <span class=\"token number\">2</span> <span class=\"token operator\">==</span> <span class=\"token number\">0</span><span class=\"token punctuation\">]</span>\n\n<span class=\"token operator\">>></span><span class=\"token operator\">></span> evens\n<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">,</span> <span class=\"token number\">2</span><span class=\"token punctuation\">,</span> <span class=\"token number\">4</span><span class=\"token punctuation\">,</span> <span class=\"token number\">6</span><span class=\"token punctuation\">,</span> <span class=\"token number\">8</span><span class=\"token punctuation\">,</span> <span class=\"token number\">10</span><span class=\"token punctuation\">,</span> <span class=\"token number\">12</span><span class=\"token punctuation\">,</span> <span class=\"token number\">14</span><span class=\"token punctuation\">,</span> <span class=\"token number\">16</span><span class=\"token punctuation\">,</span> <span class=\"token number\">18</span><span class=\"token punctuation\">]</span></code></pre></div>\n<p>Once you become comfortable with list comprehensions, you'll find yourself using them everywhere.</p>\n<h2 id=\"dictionary-comprehensions\" style=\"position:relative;\"><a href=\"#dictionary-comprehensions\" aria-label=\"dictionary comprehensions permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Dictionary Comprehensions</h2>\n<p>Just as we can construct lists, we can construct dictionaries.</p>\n<p>Suppose we want a mapping of numbers to their squares.</p>\n<p>Without a comprehension:</p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\">squares <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span><span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">for</span> i <span class=\"token keyword\">in</span> <span class=\"token builtin\">range</span><span class=\"token punctuation\">(</span><span class=\"token number\">5</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    squares<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> i <span class=\"token operator\">*</span> i</code></pre></div>\n<p>With a dictionary comprehension:</p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\">squares <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span>i<span class=\"token punctuation\">:</span> i <span class=\"token operator\">*</span> i <span class=\"token keyword\">for</span> i <span class=\"token keyword\">in</span> <span class=\"token builtin\">range</span><span class=\"token punctuation\">(</span><span class=\"token number\">5</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">}</span></code></pre></div>\n<p>The result:</p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token operator\">>></span><span class=\"token operator\">></span> squares\n<span class=\"token punctuation\">{</span><span class=\"token number\">0</span><span class=\"token punctuation\">:</span> <span class=\"token number\">0</span><span class=\"token punctuation\">,</span> <span class=\"token number\">1</span><span class=\"token punctuation\">:</span> <span class=\"token number\">1</span><span class=\"token punctuation\">,</span> <span class=\"token number\">2</span><span class=\"token punctuation\">:</span> <span class=\"token number\">4</span><span class=\"token punctuation\">,</span> <span class=\"token number\">3</span><span class=\"token punctuation\">:</span> <span class=\"token number\">9</span><span class=\"token punctuation\">,</span> <span class=\"token number\">4</span><span class=\"token punctuation\">:</span> <span class=\"token number\">16</span><span class=\"token punctuation\">}</span></code></pre></div>\n<p>Neat.</p>\n<h2 id=\"defaultdict\" style=\"position:relative;\"><a href=\"#defaultdict\" aria-label=\"defaultdict permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>defaultdict</h2>\n<p>Have you ever written code like this?</p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\">counts <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span><span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">for</span> word <span class=\"token keyword\">in</span> words<span class=\"token punctuation\">:</span>\n\n    <span class=\"token keyword\">if</span> word <span class=\"token keyword\">not</span> <span class=\"token keyword\">in</span> counts<span class=\"token punctuation\">:</span>\n        counts<span class=\"token punctuation\">[</span>word<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token number\">0</span>\n\n    counts<span class=\"token punctuation\">[</span>word<span class=\"token punctuation\">]</span> <span class=\"token operator\">+=</span> <span class=\"token number\">1</span></code></pre></div>\n<p>This pattern appears all over the place.</p>\n<p>The <code class=\"language-text\">collections</code> module provides a cleaner solution.</p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token keyword\">from</span> collections <span class=\"token keyword\">import</span> defaultdict\n\ncounts <span class=\"token operator\">=</span> defaultdict<span class=\"token punctuation\">(</span><span class=\"token builtin\">int</span><span class=\"token punctuation\">)</span>\n\n<span class=\"token keyword\">for</span> word <span class=\"token keyword\">in</span> words<span class=\"token punctuation\">:</span>\n    counts<span class=\"token punctuation\">[</span>word<span class=\"token punctuation\">]</span> <span class=\"token operator\">+=</span> <span class=\"token number\">1</span></code></pre></div>\n<p>Notice that we never initialize anything.</p>\n<p>Missing keys automatically start at zero.</p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token operator\">>></span><span class=\"token operator\">></span> counts<span class=\"token punctuation\">[</span><span class=\"token string\">\"python\"</span><span class=\"token punctuation\">]</span>\n<span class=\"token number\">3</span></code></pre></div>\n<p>The same trick works for lists.</p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token keyword\">from</span> collections <span class=\"token keyword\">import</span> defaultdict\n\ngroups <span class=\"token operator\">=</span> defaultdict<span class=\"token punctuation\">(</span><span class=\"token builtin\">list</span><span class=\"token punctuation\">)</span>\n\n<span class=\"token keyword\">for</span> name<span class=\"token punctuation\">,</span> department <span class=\"token keyword\">in</span> employees<span class=\"token punctuation\">:</span>\n    groups<span class=\"token punctuation\">[</span>department<span class=\"token punctuation\">]</span><span class=\"token punctuation\">.</span>append<span class=\"token punctuation\">(</span>name<span class=\"token punctuation\">)</span></code></pre></div>\n<p>No checks required.</p>\n<h2 id=\"counter\" style=\"position:relative;\"><a href=\"#counter\" aria-label=\"counter permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Counter</h2>\n<p>Here's a question.</p>\n<p>How many times does each character appear in a string?</p>\n<p>Many developers create a dictionary and count manually.</p>\n<p>Python already has a solution.</p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token keyword\">from</span> collections <span class=\"token keyword\">import</span> Counter\n\ncounter <span class=\"token operator\">=</span> Counter<span class=\"token punctuation\">(</span><span class=\"token string\">\"mississippi\"</span><span class=\"token punctuation\">)</span></code></pre></div>\n<p>Let's see what it found.</p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token operator\">>></span><span class=\"token operator\">></span> counter\nCounter<span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span><span class=\"token string\">'i'</span><span class=\"token punctuation\">:</span> <span class=\"token number\">4</span><span class=\"token punctuation\">,</span> <span class=\"token string\">'s'</span><span class=\"token punctuation\">:</span> <span class=\"token number\">4</span><span class=\"token punctuation\">,</span> <span class=\"token string\">'p'</span><span class=\"token punctuation\">:</span> <span class=\"token number\">2</span><span class=\"token punctuation\">,</span> <span class=\"token string\">'m'</span><span class=\"token punctuation\">:</span> <span class=\"token number\">1</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span></code></pre></div>\n<p>Want the most common elements?</p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token operator\">>></span><span class=\"token operator\">></span> counter<span class=\"token punctuation\">.</span>most_common<span class=\"token punctuation\">(</span><span class=\"token number\">2</span><span class=\"token punctuation\">)</span>\n\n<span class=\"token punctuation\">[</span><span class=\"token punctuation\">(</span><span class=\"token string\">'i'</span><span class=\"token punctuation\">,</span> <span class=\"token number\">4</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">(</span><span class=\"token string\">'s'</span><span class=\"token punctuation\">,</span> <span class=\"token number\">4</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">]</span></code></pre></div>\n<p>Oh yeah, it's all coming together.</p>\n<p>In many situations, <code class=\"language-text\">Counter</code> is exactly the tool you want.</p>\n<h2 id=\"zip\" style=\"position:relative;\"><a href=\"#zip\" aria-label=\"zip permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>zip()</h2>\n<p>Suppose we have two lists.</p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\">names <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token string\">\"Alice\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"Bob\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"Charlie\"</span><span class=\"token punctuation\">]</span>\nscores <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token number\">95</span><span class=\"token punctuation\">,</span> <span class=\"token number\">82</span><span class=\"token punctuation\">,</span> <span class=\"token number\">99</span><span class=\"token punctuation\">]</span></code></pre></div>\n<p>A beginner solution might involve indexing.</p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token keyword\">for</span> i <span class=\"token keyword\">in</span> <span class=\"token builtin\">range</span><span class=\"token punctuation\">(</span><span class=\"token builtin\">len</span><span class=\"token punctuation\">(</span>names<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span>names<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span> scores<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span></code></pre></div>\n<p>Python gives us a better option.</p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token keyword\">for</span> name<span class=\"token punctuation\">,</span> score <span class=\"token keyword\">in</span> <span class=\"token builtin\">zip</span><span class=\"token punctuation\">(</span>names<span class=\"token punctuation\">,</span> scores<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span>name<span class=\"token punctuation\">,</span> score<span class=\"token punctuation\">)</span></code></pre></div>\n<p>Output:</p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\">Alice <span class=\"token number\">95</span>\nBob <span class=\"token number\">82</span>\nCharlie <span class=\"token number\">99</span></code></pre></div>\n<p>The values stay perfectly aligned.</p>\n<p>We can even construct a dictionary.</p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token operator\">>></span><span class=\"token operator\">></span> <span class=\"token builtin\">dict</span><span class=\"token punctuation\">(</span><span class=\"token builtin\">zip</span><span class=\"token punctuation\">(</span>names<span class=\"token punctuation\">,</span> scores<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n\n<span class=\"token punctuation\">{</span><span class=\"token string\">'Alice'</span><span class=\"token punctuation\">:</span> <span class=\"token number\">95</span><span class=\"token punctuation\">,</span> <span class=\"token string\">'Bob'</span><span class=\"token punctuation\">:</span> <span class=\"token number\">82</span><span class=\"token punctuation\">,</span> <span class=\"token string\">'Charlie'</span><span class=\"token punctuation\">:</span> <span class=\"token number\">99</span><span class=\"token punctuation\">}</span></code></pre></div>\n<p>Pretty handy.</p>\n<h2 id=\"any\" style=\"position:relative;\"><a href=\"#any\" aria-label=\"any permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>any()</h2>\n<p>Suppose we want to know if a list contains at least one negative number.</p>\n<p>Many developers write:</p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\">found <span class=\"token operator\">=</span> <span class=\"token boolean\">False</span>\n\n<span class=\"token keyword\">for</span> value <span class=\"token keyword\">in</span> numbers<span class=\"token punctuation\">:</span>\n    <span class=\"token keyword\">if</span> value <span class=\"token operator\">&lt;</span> <span class=\"token number\">0</span><span class=\"token punctuation\">:</span>\n        found <span class=\"token operator\">=</span> <span class=\"token boolean\">True</span>\n        <span class=\"token keyword\">break</span></code></pre></div>\n<p>Python has already solved this problem.</p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\">found <span class=\"token operator\">=</span> <span class=\"token builtin\">any</span><span class=\"token punctuation\">(</span>value <span class=\"token operator\">&lt;</span> <span class=\"token number\">0</span> <span class=\"token keyword\">for</span> value <span class=\"token keyword\">in</span> numbers<span class=\"token punctuation\">)</span></code></pre></div>\n<p>Let's see it in action.</p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token operator\">>></span><span class=\"token operator\">></span> <span class=\"token builtin\">any</span><span class=\"token punctuation\">(</span>x <span class=\"token operator\">&lt;</span> <span class=\"token number\">0</span> <span class=\"token keyword\">for</span> x <span class=\"token keyword\">in</span> <span class=\"token punctuation\">[</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span> <span class=\"token number\">2</span><span class=\"token punctuation\">,</span> <span class=\"token number\">3</span><span class=\"token punctuation\">,</span> <span class=\"token operator\">-</span><span class=\"token number\">4</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span>\n\n<span class=\"token boolean\">True</span></code></pre></div>\n<p>The expression stops as soon as a match is found.</p>\n<p>This is often both cleaner and faster.</p>\n<p>Similarly, there's an opposite function named <code class=\"language-text\">all()</code>.</p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token operator\">>></span><span class=\"token operator\">></span> <span class=\"token builtin\">all</span><span class=\"token punctuation\">(</span>x <span class=\"token operator\">></span> <span class=\"token number\">0</span> <span class=\"token keyword\">for</span> x <span class=\"token keyword\">in</span> <span class=\"token punctuation\">[</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span> <span class=\"token number\">2</span><span class=\"token punctuation\">,</span> <span class=\"token number\">3</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span>\n\n<span class=\"token boolean\">True</span></code></pre></div>\n<h2 id=\"heapq\" style=\"position:relative;\"><a href=\"#heapq\" aria-label=\"heapq permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>heapq</h2>\n<p>Suppose we want the largest three values in a list.</p>\n<p>A common approach is:</p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token builtin\">sorted</span><span class=\"token punctuation\">(</span>numbers<span class=\"token punctuation\">,</span> reverse<span class=\"token operator\">=</span><span class=\"token boolean\">True</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">[</span><span class=\"token punctuation\">:</span><span class=\"token number\">3</span><span class=\"token punctuation\">]</span></code></pre></div>\n<p>This works.</p>\n<p>However, if we only need a few values, sorting the entire list can be unnecessary.</p>\n<p>Python provides a heap implementation in the <code class=\"language-text\">heapq</code> module.</p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token keyword\">import</span> heapq\n\nlargest <span class=\"token operator\">=</span> heapq<span class=\"token punctuation\">.</span>nlargest<span class=\"token punctuation\">(</span><span class=\"token number\">3</span><span class=\"token punctuation\">,</span> numbers<span class=\"token punctuation\">)</span></code></pre></div>\n<p>Example:</p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token operator\">>></span><span class=\"token operator\">></span> heapq<span class=\"token punctuation\">.</span>nlargest<span class=\"token punctuation\">(</span><span class=\"token number\">3</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">[</span><span class=\"token number\">5</span><span class=\"token punctuation\">,</span> <span class=\"token number\">9</span><span class=\"token punctuation\">,</span> <span class=\"token number\">1</span><span class=\"token punctuation\">,</span> <span class=\"token number\">20</span><span class=\"token punctuation\">,</span> <span class=\"token number\">7</span><span class=\"token punctuation\">,</span> <span class=\"token number\">12</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span>\n\n<span class=\"token punctuation\">[</span><span class=\"token number\">20</span><span class=\"token punctuation\">,</span> <span class=\"token number\">12</span><span class=\"token punctuation\">,</span> <span class=\"token number\">9</span><span class=\"token punctuation\">]</span></code></pre></div>\n<p>Likewise:</p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token operator\">>></span><span class=\"token operator\">></span> heapq<span class=\"token punctuation\">.</span>nsmallest<span class=\"token punctuation\">(</span><span class=\"token number\">3</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">[</span><span class=\"token number\">5</span><span class=\"token punctuation\">,</span> <span class=\"token number\">9</span><span class=\"token punctuation\">,</span> <span class=\"token number\">1</span><span class=\"token punctuation\">,</span> <span class=\"token number\">20</span><span class=\"token punctuation\">,</span> <span class=\"token number\">7</span><span class=\"token punctuation\">,</span> <span class=\"token number\">12</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span>\n\n<span class=\"token punctuation\">[</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span> <span class=\"token number\">5</span><span class=\"token punctuation\">,</span> <span class=\"token number\">7</span><span class=\"token punctuation\">]</span></code></pre></div>\n<p>Heaps are commonly used in:</p>\n<ul>\n<li>Priority queues</li>\n<li>Scheduling systems</li>\n<li>Graph algorithms</li>\n<li>Streaming computations</li>\n</ul>\n<p>You don't need to understand heap internals immediately to benefit from the module.</p>\n<h2 id=\"putting-it-all-together\" style=\"position:relative;\"><a href=\"#putting-it-all-together\" aria-label=\"putting it all together permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Putting It All Together</h2>\n<p>Let's solve a small problem.</p>\n<p>Given a list of employees:</p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\">employees <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span>\n    <span class=\"token punctuation\">(</span><span class=\"token string\">\"Alice\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"Engineering\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n    <span class=\"token punctuation\">(</span><span class=\"token string\">\"Bob\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"Engineering\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n    <span class=\"token punctuation\">(</span><span class=\"token string\">\"Charlie\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"Sales\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n    <span class=\"token punctuation\">(</span><span class=\"token string\">\"David\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"Sales\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n    <span class=\"token punctuation\">(</span><span class=\"token string\">\"Emma\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"Engineering\"</span><span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">]</span></code></pre></div>\n<p>We can group employees by department:</p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token keyword\">from</span> collections <span class=\"token keyword\">import</span> defaultdict\n\ndepartments <span class=\"token operator\">=</span> defaultdict<span class=\"token punctuation\">(</span><span class=\"token builtin\">list</span><span class=\"token punctuation\">)</span>\n\n<span class=\"token keyword\">for</span> name<span class=\"token punctuation\">,</span> department <span class=\"token keyword\">in</span> employees<span class=\"token punctuation\">:</span>\n    departments<span class=\"token punctuation\">[</span>department<span class=\"token punctuation\">]</span><span class=\"token punctuation\">.</span>append<span class=\"token punctuation\">(</span>name<span class=\"token punctuation\">)</span></code></pre></div>\n<p>Count employees per department:</p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token keyword\">from</span> collections <span class=\"token keyword\">import</span> Counter\n\ncounts <span class=\"token operator\">=</span> Counter<span class=\"token punctuation\">(</span>\n    department\n    <span class=\"token keyword\">for</span> _<span class=\"token punctuation\">,</span> department <span class=\"token keyword\">in</span> employees\n<span class=\"token punctuation\">)</span></code></pre></div>\n<p>Find the largest department:</p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token operator\">>></span><span class=\"token operator\">></span> counts<span class=\"token punctuation\">.</span>most_common<span class=\"token punctuation\">(</span><span class=\"token number\">1</span><span class=\"token punctuation\">)</span>\n\n<span class=\"token punctuation\">[</span><span class=\"token punctuation\">(</span><span class=\"token string\">'Engineering'</span><span class=\"token punctuation\">,</span> <span class=\"token number\">3</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">]</span></code></pre></div>\n<p>All without managing a single index variable.</p>\n<h2 id=\"thats-it-folks\" style=\"position:relative;\"><a href=\"#thats-it-folks\" aria-label=\"thats it folks permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>That's It Folks!</h2>\n<p>We covered:</p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\">List Comprehensions\nDictionary Comprehensions\ndefaultdict\nCounter\n<span class=\"token builtin\">zip</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n<span class=\"token builtin\">any</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\nheapq</code></pre></div>\n<p>None of these features are particularly complicated.</p>\n<p>The real power comes from recognizing common programming patterns and replacing them with the tools Python already provides.</p>\n<p>Whenever you find yourself writing:</p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token keyword\">for</span> <span class=\"token punctuation\">.</span><span class=\"token punctuation\">.</span><span class=\"token punctuation\">.</span>\n<span class=\"token keyword\">if</span> <span class=\"token punctuation\">.</span><span class=\"token punctuation\">.</span><span class=\"token punctuation\">.</span>\ncreate dictionary <span class=\"token punctuation\">.</span><span class=\"token punctuation\">.</span><span class=\"token punctuation\">.</span>\ncreate <span class=\"token builtin\">list</span> <span class=\"token punctuation\">.</span><span class=\"token punctuation\">.</span><span class=\"token punctuation\">.</span>\ntrack counts <span class=\"token punctuation\">.</span><span class=\"token punctuation\">.</span><span class=\"token punctuation\">.</span></code></pre></div>\n<p>it's worth asking:</p>\n<blockquote>\n<p>\"Is there already a Python idiom for this?\"</p>\n</blockquote>\n<p>Very often, the answer is yes.</p>\n<p>And your code will usually be shorter, clearer, and easier to maintain because of it.</p>","excerpt":"Python Idioms In this post, we're going to look at some of the most useful Python idioms that can make your code shorter, cleaner, and…","fields":{"slug":"/python-idioms/"},"frontmatter":{"title":"Python Idioms","date":"May 06, 2025","tags":["Python"],"categories":["Highlight","Python"],"description":"Useful Python Idioms","comments_off":false,"thumbnail":{"childImageSharp":{"fixed":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAAsTAAALEwEAmpwYAAAD40lEQVQ4y42Ue0yVZRzHX5Bz3vO+5z2c876H1uZarH+akpGRTR1psqZog0BKEG0qGojA0ZyTSEQDzjiH2+EgF+MihmbW0iQ3y0u2Jt0kG6Rd1lAR05aBEVOum30aL164tv747nn++O3z/L7P83u+gs1mY6ysVqu+qqqKZrfrUu+tmjaqZqyEiWB6sapiFk0YBAHRx0eXURCQReO4gycFjixQJJmg+XOJfiudZa4c4txuXkrPJHjBQhSzfL92LFQYZ1NTkQ0is2LCcRzfR8rheip6OijrvEn5H7coa+8lYuN2vdN79m3WyYCqiv2hAEy+U1jmyWTde6WEJSVQ2dNBwcVLuH9so6y9j4yjTSiSCU3T0LTRDQkPYDYsshnZT8RPEHhmaTgbT75LyuF3SH6/Huf5CxS1XmdXWw9bDzViNBgRZX/8jJZR9oV7nSmSmcCnHmdFXSavHfGQcKCI1XVFrKn1klBdQU5zC8Wtv1PR3suG/V/gSZ1Ja8OLZCRNRzb7j7Zs9bei2jU2nduNl+8oGjiLp/8HSm7/grfrEqWdv1HU1kb+z1eobL9N8oFGjhfOg7aVcDmCl5c8ip/BotsXhh/BxIzFs3HdOYGz6zjOzs/Ju/EVJd0/4em6SEnHVUpv/EnptS5q/oKluTWcKgyF5li4EkGtOxjBR8FuHwLaNSRfI3PXLcHNSZzdJ3D9fYa8m9+w5qO3WVtbStKe3SRWV7Ohpp6YbXmkxc9j4FQsg9/G6MCG6hBEkwVVHQGck7AY9z8n9Q4LBs4SlZVK8YIozqe8TvPm9bRsW0NzTjwXCqK4c2w1NK6k/+toHXikKgSDaEFT71o2GyWmhYWQN/gp7lufsaXtY7ZELYftVVDghTIX7NkBB9Ph6CYGj61l4PRyer6MhmuReLKeeGB55HdLOeOlkhbeuP4Jxa8mQ0Y5vbluBoqzoWY7HNwKDWlwOhGaVsGvsXQ3hRMS/DCS7D9s+f7YyGYemfYYr3g3syjfQU7kSsispD83n8HibD7cEEvlunDqNi6i3DEf5/pZ5KbOZM7TUxGlYZg+h6MG26xgniIiCAJvhkbAjir6ctw68LLLwTnnKr73xHEoKxzBR8LXoGAaAZvg69kICLDjq0hkPBcJuXvpy3HRW7gT9mfzgWMpcWHTubpvBZJiIcCu6g8xMiDGh4PNhmxRCJoayLnEDHB5YFce7N1JV7WDFm8821Y8i1FSdNjYxBEmysIhqGRRsKsqi2c8SfLzoaQtnEvCCyHMDgpElC33E2bS+BoLHoL6W60YZBkfk4SPKOEryoiyot/Z/wrYicJWG4q0uxra/xdsCPgvtwbuWaCeECwAAAAASUVORK5CYII=","width":150,"height":150,"src":"/static/ea5efce3b6f9f1f363338cd96219512f/92ab1/python.png","srcSet":"/static/ea5efce3b6f9f1f363338cd96219512f/92ab1/python.png 1x,\n/static/ea5efce3b6f9f1f363338cd96219512f/668a7/python.png 1.5x,\n/static/ea5efce3b6f9f1f363338cd96219512f/56e34/python.png 2x"}}}}}},"pageContext":{"slug":"/python-idioms/","previous":{"id":"1ffa5c49-97a3-5fcf-9454-0e8941ad4716","frontmatter":{"title":"Trees in Python","tags":["Python"],"categories":["Highlight","Python"],"template":"post"},"fields":{"slug":"/python-tree/"}},"next":{"id":"caa5e25b-9f7c-56c9-8144-d0888aed46dd","frontmatter":{"title":"Heap in Python","tags":["Python"],"categories":["Highlight","Python"],"template":"post"},"fields":{"slug":"/python-heap/"}}}},
    "staticQueryHashes": []}