Sick Gaming
[Tut] The Most Pythonic Way to Join a List in Reverse Order - Printable Version

+- Sick Gaming (https://www.sickgaming.net)
+-- Forum: Programming (https://www.sickgaming.net/forum-76.html)
+--- Forum: Python (https://www.sickgaming.net/forum-83.html)
+--- Thread: [Tut] The Most Pythonic Way to Join a List in Reverse Order (/thread-95629.html)



[Tut] The Most Pythonic Way to Join a List in Reverse Order - xSicKxBot - 06-11-2020

The Most Pythonic Way to Join a List in Reverse Order

<div><p class="has-background has-luminous-vivid-amber-background-color"><strong>The most efficient method to join a list of Python strings in reverse order is to use the Python code <code>''.join(l[::-1])</code>. First, reverse the list <code>l</code> using slicing with a negative step size <code>l[::-1]</code>. Second, glue together the strings in the list using the <code>join(...)</code> method on the empty string <code>''</code>.</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="The Most Pythonic Way to Join a List in Reverse Order" width="1400" height="788" src="https://www.youtube.com/embed/brhppRcRpis?feature=oembed" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe></div>
</div>
</figure>
<p><strong>Problem</strong>: Given a list of strings. How to join the strings in reverse order?</p>
<p><strong>Example</strong>: You want to join the following list</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="">l = ['n', 'o', 'h', 't', 'y', 'p']</pre>
<p>to obtain the joined string in reverse order</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="">python</pre>
<p>Let’s get a short overview on how to accomplish this.</p>
<p><strong>Solution Overview</strong>: You can try the three methods in our interactive Python shell.</p>
<p> <iframe src="https://trinket.io/embed/python/8a6ba00cf3" width="100%" height="356" frameborder="0" marginwidth="0" marginheight="0" allowfullscreen></iframe> </p>
<p>Next, we’ll dive into each method separately.</p>
<h2>Method 1: Join + Slicing</h2>
<p>The first and most Pythonic method to reverse and join a list of strings is to use slicing with a <a rel="noreferrer noopener" href="https://blog.finxter.com/daily-python-puzzle-negative-indexing/" target="_blank">negative step size</a>. </p>
<p>You can slice any list in Python using the notation <code>list[start:stop:step]</code> to create a sublist starting with index <code>start</code>, ending right before index <code>stop</code>, and using the given <code>step</code> size—which can also be negative to slice from right to left. If you need a refresher on slicing, check out our <a rel="noreferrer noopener" href="https://blog.finxter.com/introduction-to-slicing-in-python/" target="_blank">detailed Finxter blog tutorial</a> or our focused book <a rel="noreferrer noopener" href="https://blog.finxter.com/coffee-break-python/" target="_blank">“Coffee Break Python Slicing”</a>.</p>
<p>Here’s the first method to reverse a list of strings and join the elements together:</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="">l = ['n', 'o', 'h', 't', 'y', 'p'] # Method 1
print(''.join(l[::-1]))
# python</pre>
<p>The <code>string.join(iterable)</code> method joins the string elements in the <code>iterable</code> to a new string by using the <code>string</code> on which it is called as a delimiter. </p>
<p>You can call this method on each list object in Python. Here’s the syntax:</p>
<p><code><code>string.join(iterable)</code></code></p>
<figure class="wp-block-table is-style-stripes">
<table>
<thead>
<tr>
<th>Argument</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>iterable</code></td>
<td>The elements to be concatenated.</td>
</tr>
</tbody>
</table>
</figure>
<p><strong>Related articles:</strong></p>
<ul>
<li><a rel="noreferrer noopener" href="https://blog.finxter.com/python-join-list/" target="_blank">Python Join List [Ultimate Guide]</a></li>
<li><a rel="noreferrer noopener" href="https://blog.finxter.com/introduction-to-slicing-in-python/" target="_blank">Python Slicing [Ultimate Guide]</a></li>
<li><a href="https://blog.finxter.com/python-list-reverse/" target="_blank" rel="noreferrer noopener">How to Reverse a Python List</a></li>
<li><a rel="noreferrer noopener" href="https://blog.finxter.com/python-lists/" target="_blank">The Ultimate Guide to Python Lists</a></li>
</ul>
<h2>Method 2: Join + reversed()</h2>
<p>The second method is also quite Pythonic: using the <code>reversed()</code> built-in function rather than slicing with a negative step size. I’d say that beginners generally prefer this method because it’s more readable to them—while expert coders prefer slicing because it’s more concise and slightly more efficient.</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="">l = ['n', 'o', 'h', 't', 'y', 'p']
print(''.join(reversed(l)))
# python</pre>
<p>The join method glues together all strings in the list—in <em>reversed</em> order!</p>
<h2>Method 3: Simple Loop</h2>
<p>The third method is the least Pythonic one: using a <a href="https://blog.finxter.com/python-loops/">loop </a>where it’s not really needed. Anyways, especially coders coming from other <a href="https://blog.finxter.com/python-vs-go-which-language-you-should-choose/" target="_blank" rel="noreferrer noopener">programming languages</a> like Java or C++ will often use this approach.</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="">l = ['n', 'o', 'h', 't', 'y', 'p'] s = ''
for x in reversed(l): s += x
print(s)
# python
</pre>
<p>However, there are several disadvantages. Can you see them?</p>
<ul>
<li>The code is less concise.</li>
<li>The code is less efficient because of the repeated string concatenation. Each loop execution causes the creation of a new string, which is highly inefficient.</li>
<li>The code requires the definition of two new variables <code>x</code> and <code>s</code> and introduces a higher level of <a rel="noreferrer noopener" href="https://blog.finxter.com/complexity-of-python-operations/" target="_blank">complexity</a>.</li>
</ul>
<p>You can see this in our interactive memory visualizer:</p>
<p> <iframe width="800" height="500" frameborder="0" src="https://pythontutor.com/iframe-embed.html#code=l%20%3D%20%5B'n',%20'o',%20'h',%20't',%20'y',%20'p'%5D%0As%20%3D%20''%0Afor%20x%20in%20reversed%28l%29%3A%0A%20%20%20%20s%20%2B%3D%20x%0Aprint%28s%29%0A&codeDivHeight=400&codeDivWidth=350&cumulative=false&curInstr=0&heapPrimitives=nevernest&origin=opt-frontend.js&py=3&rawInputLstJSON=%5B%5D&textReferences=false"> </iframe> </p>
<p><em><strong>Exercise</strong>: click “Next” to see the memory objects used in this code snippet!</em></p>
<p><strong>Related articles:</strong></p>
<ul>
<li><a rel="noreferrer noopener" href="https://blog.finxter.com/python-profilers-how-to-speed-up-your-python-app/" target="_blank">Performance Tuning in Python</a></li>
<li><a rel="noreferrer noopener" href="https://blog.finxter.com/python-list-concatenation-add-vs-inplace-add-vs-extend/" target="_blank">List Concatenation</a></li>
<li><a rel="noreferrer noopener" href="https://blog.finxter.com/python-built-in-string-functions-simply-explained/" target="_blank">Python Built-in String Functions</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/06/09/the-most-pythonic-way-to-join-a-list-in-reverse-order/