Create an account


Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
[Tut] How to Filter a List of Lists in Python?

#1
How to Filter a List of Lists in Python?

<div><p><strong>Short answer: To filter a list of lists for a condition on the inner lists, use the list comprehension statement <code>[x for x in list if condition(x)]</code> and replace <code>condition(x)</code> with your filtering condition that returns <code>True</code> to include inner list <code>x</code>, and <code>False</code> otherwise. </strong></p>
<figure class="wp-block-embed-youtube wp-block-embed is-type-video is-provider-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio">
<div class="wp-block-embed__wrapper">
<div class="ast-oembed-container"><iframe title="How to Filter a List in Python?" width="1400" height="788" src="https://www.youtube.com/embed/3nG4TLkqzf8?feature=oembed" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe></div>
</div>
</figure>
<p>Lists belong to the most important data structures in Python—every master coder knows them by heart! Surprisingly, even intermediate coders don’t know the best way to <a href="https://blog.finxter.com/how-to-filter-a-list-in-python/" target="_blank" rel="noreferrer noopener">filter a list</a>—let alone a list of lists in Python. This tutorial shows you how to do the latter!</p>
<p><strong>Problem</strong>: Say, you’ve got a list of lists. You want to filter the list of lists so that only those inner lists remain that satisfy a certain condition. The condition is a function of the inner list—such as the average or sum of the inner list elements.</p>
<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img src="https://blog.finxter.com/wp-content/uploads/2020/05/filter-1024x576.jpg" alt="" class="wp-image-8362" width="768" height="432" srcset="https://blog.finxter.com/wp-content/uploads/2020/05/filter-scaled.jpg 1024w, https://blog.finxter.com/wp-content/uplo...00x169.jpg 300w, https://blog.finxter.com/wp-content/uplo...68x432.jpg 768w" sizes="(max-width: 768px) 100vw, 768px" /></figure>
</div>
<p><strong>Example</strong>: Given the following list of lists with weekly temperature measurements per week—and one inner list per week.</p>
<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""># Measurements of a temperature sensor (7 per week)
temperature = [[10, 8, 9, 12, 13, 7, 8], # week 1 [9, 9, 5, 6, 6, 9, 11], # week 2 [10, 8, 8, 5, 6, 3, 1]] # week 3</pre>
<p>How to filter out the colder weeks with average temperature value &lt;8? This is the output you desire:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">print(cold_weeks)
# [[9, 9, 5, 6, 6, 9, 11], [10, 8, 8, 5, 6, 3, 1]]</pre>
<p>There are two semantically equivalent methods to achieve this: <a rel="noreferrer noopener" href="https://blog.finxter.com/list-comprehension/" target="_blank">list comprehension</a> and the <a rel="noreferrer noopener" href="https://blog.finxter.com/how-to-get-rid-of-pythons-map-function-with-list-comprehension/" target="_blank"><code>map()</code> function</a>. Let’s explore both variants next.</p>
<p>If you’re short on time, you can also get a quick overview by playing with the code in your web browser—I’ll explain the code after that.</p>
<figure><iframe src="https://repl.it/@finxter/filterlistoflistshowto?lite=true" allowfullscreen="true" width="100%" height="1000px"></iframe></figure>
<h2>Method 1: List Comprehension</h2>
<p>The most Pythonic way of filtering a list—in my opinion—is the list comprehension statement <code>[x for x in list if condition]</code>. You can replace <code>condition</code> with any function of <code>x</code> you would like to use as a filtering condition. Only elements that are in the <code>list</code> <strong>and </strong>meet the <code>condition</code> are included in the newly created list.</p>
<p><strong>Solution</strong>: Here’s how you can solve the above problem to filter a list of lists based on a function of the inner lists:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""># Measurements of a temperature sensor (7 per week)
temperature = [[10, 8, 9, 12, 13, 7, 8], # week 1 [9, 9, 5, 6, 6, 9, 11], # week 2 [10, 8, 8, 5, 6, 3, 1]] # week 3 # How to filter weeks with average temperature &lt;8? # Method 1: List Comprehension
cold_weeks = [x for x in temperature if sum(x)/len(x)&lt;8]
print(cold_weeks)
# [[9, 9, 5, 6, 6, 9, 11], [10, 8, 8, 5, 6, 3, 1]]</pre>
<p>The second and third list in the <a rel="noreferrer noopener" href="https://blog.finxter.com/how-to-sum-list-of-lists-in-python-rows/" target="_blank">list of lists</a> meet the condition of having an average temperature of less than 8 degrees. So those are included in the variable <code>cold_weeks</code>. </p>
<p>You can visualize the memory usage of this code snippet in the following interactive tool:</p>
<p> <iframe width="800" height="500" frameborder="0" src="https://pythontutor.com/iframe-embed.html#code=%23%20Measurements%20of%20a%20temperature%20sensor%20%287%20per%20week%29%0Atemperature%20%3D%20%5B%5B10,%208,%209,%2012,%2013,%207,%208%5D,%20%23%20week%201%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5B9,%209,%205,%206,%206,%209,%2011%5D,%20%23%20week%202%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5B10,%208,%208,%205,%206,%203,%201%5D%5D%20%23%20week%203%0A%0A%0A%23%20How%20to%20filter%20weeks%20with%20average%20temperature%20%3C8%3F%0A%0A%23%20Method%201%3A%20List%20Comprehension%0Acold_weeks%20%3D%20%5Bx%20for%20x%20in%20temperature%20if%20sum%28x%29/len%28x%29%3C8%5D%0Aprint%28cold_weeks%29&codeDivHeight=400&codeDivWidth=350&cumulative=false&curInstr=0&heapPrimitives=nevernest&origin=opt-frontend.js&py=3&rawInputLstJSON=%5B%5D&textReferences=false"> </iframe> </p>
<p>This is the most efficient way of filtering a list and it’s also the most Pythonic one. If you look for alternatives though, keep reading.</p>
<p><strong>Related articles:</strong></p>
<ul>
<li><a rel="noreferrer noopener" href="https://blog.finxter.com/list-comprehension-python-list-of-lists/" target="_blank">List Comprehension — Python List of Lists</a></li>
<li><a rel="noreferrer noopener" href="https://blog.finxter.com/python-lists-filter-vs-list-comprehension-which-is-faster/" target="_blank">Filter() vs List Comprehension</a></li>
<li><a rel="noreferrer noopener" href="https://blog.finxter.com/how-does-nested-list-comprehension-work-in-python/" target="_blank">Nested List Comprehension</a></li>
<li><a rel="noreferrer noopener" href="https://blog.finxter.com/python-lists/" target="_blank">The Ultimate Guide to Python Lists</a></li>
<li><a href="https://blog.finxter.com/list-comprehension/" target="_blank" rel="noreferrer noopener">List Comprehension</a></li>
</ul>
<h2>Method 2: Filter() Function</h2>
<p>The <code>filter(function, iterable)</code> function takes a function as input that takes on argument (a list element) and returns a Boolean value that indicates whether this list element should pass the filter. All elements that pass the filter are returned as a new <code>iterable</code> object (a filter object).</p>
<p>You can use the <code>lambda</code> function statement to create the function right where you pass it as an argument. The syntax of the lambda function is <code>lambda x: expression</code> and it means that you use <code>x</code> as an input argument and you return expression as a result (that can or cannot use <code>x</code> to decide about the return value). For more information, see my <a rel="noreferrer noopener" href="https://blog.finxter.com/a-simple-introduction-of-the-lambda-function-in-python/" target="_blank">detailed blog article about the lambda function</a>.</p>
<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""># Measurements of a temperature sensor (7 per week)
temperature = [[10, 8, 9, 12, 13, 7, 8], # week 1 [9, 9, 5, 6, 6, 9, 11], # week 2 [10, 8, 8, 5, 6, 3, 1]] # week 3 # How to filter weeks with average temperature &lt;8? # Method 2: Map()
cold_weeks = list(filter(lambda x: sum(x) / len(x) &lt; 8, temperature))
print(cold_weeks)
# [[9, 9, 5, 6, 6, 9, 11], [10, 8, 8, 5, 6, 3, 1]]</pre>
<p>Again, the second and third list in the <a rel="noreferrer noopener" href="https://blog.finxter.com/how-to-sum-list-of-lists-in-python-rows/" target="_blank">list of lists</a> meet the condition of having an average temperature of less than 8 degrees. So those are included in the variable <code>cold_weeks</code>.</p>
<p>The <code>filter()</code> function returns a filter object that’s an <code>iterable</code>. To convert it to a list, you use the <code>list(...)</code> constructor.</p>
<p>Play with this code by clicking “Next” in the interactive code visualization tool:</p>
<p> <iframe width="800" height="500" frameborder="0" src="https://pythontutor.com/iframe-embed.html#code=%23%20Measurements%20of%20a%20temperature%20sensor%20%287%20per%20week%29%0Atemperature%20%3D%20%5B%5B10,%208,%209,%2012,%2013,%207,%208%5D,%20%23%20week%201%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5B9,%209,%205,%206,%206,%209,%2011%5D,%20%23%20week%202%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5B10,%208,%208,%205,%206,%203,%201%5D%5D%20%23%20week%203%0A%0A%0A%23%20How%20to%20filter%20weeks%20with%20average%20temperature%20%3C8%3F%0A%0A%23%20Method%202%3A%20Map%28%29%0Acold_weeks%20%3D%20list%28filter%28lambda%20x%3A%20sum%28x%29%20/%20len%28x%29%20%3C%208,%20temperature%29%29%0Aprint%28cold_weeks%29&codeDivHeight=400&codeDivWidth=350&cumulative=false&curInstr=0&heapPrimitives=nevernest&origin=opt-frontend.js&py=3&rawInputLstJSON=%5B%5D&textReferences=false"> </iframe> </p>
<p><strong>Related articles:</strong></p>
<ul>
<li><a rel="noreferrer noopener" href="https://blog.finxter.com/how-to-filter-in-python-using-lambda-functions/" target="_blank">How to Filter Using the Lambda Function</a></li>
<li><a rel="noreferrer noopener" href="https://blog.finxter.com/which-is-faster-list-comprehension-or-map-function-in-python/" target="_blank">Which is Faster – List Comprehension or Map()?</a></li>
<li><a rel="noreferrer noopener" href="https://blog.finxter.com/how-to-filter-in-python-using-lambda-functions/" target="_blank">How to Filter Using the Lambda Function?</a></li>
<li><a href="https://blog.finxter.com/python-crash-course/" target="_blank" rel="noreferrer noopener">Python Programming Tutorial</a></li>
</ul>
<h2>Where to Go From Here?</h2>
<p>Enough theory, let’s get some practice!</p>
<p>To become successful in coding, you need to get out there and solve real problems for real people. That’s how you can become a six-figure earner easily. And that’s how you polish the skills you really need in practice. After all, what’s the use of learning theory that nobody ever needs?</p>
<p><strong>Practice projects is how you sharpen your saw in coding!</strong></p>
<p>Do you want to become a code master by focusing on practical code projects that actually earn you money and solve problems for people?</p>
<p>Then become a Python freelance developer! It’s the best way of approaching the task of improving your Python skills—even if you are a complete beginner.</p>
<p>Join my free webinar <a rel="noreferrer noopener" href="https://blog.finxter.com/webinar-freelancer/" target="_blank">“How to Build Your High-Income Skill Python”</a> and watch how I grew my coding business online and how you can, too—from the comfort of your own home.</p>
<p><a href="https://blog.finxter.com/webinar-freelancer/" target="_blank" rel="noreferrer noopener">Join the free webinar now!</a></p>
</div>


https://www.sickgaming.net/blog/2020/05/...in-python/
Reply



Forum Jump:


Users browsing this thread:
1 Guest(s)

Forum software by © MyBB Theme © iAndrew 2016