[Tut] Python | Split String Empty Separator - 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] Python | Split String Empty Separator (/thread-100303.html) |
[Tut] Python | Split String Empty Separator - xSicKxBot - 11-27-2022 Python | Split String Empty Separator <div> <div class="kk-star-ratings kksr-auto kksr-align-left kksr-valign-top" data-payload='{"align":"left","id":"928531","slug":"default","valign":"top","ignore":"","reference":"auto","class":"","count":"0","legendonly":"","readonly":"","score":"0","best":"5","gap":"5","greet":"Rate this post","legend":"0\/5 - (0 votes)","size":"24","width":"0","_legend":"{score}\/{best} - ({count} {votes})","font_factor":"1.25"}'> <div class="kksr-stars"> <div class="kksr-stars-inactive"> <div class="kksr-star" data-star="1" style="padding-right: 5px"> <div class="kksr-icon" style="width: 24px; height: 24px;"></div> </p></div> <div class="kksr-star" data-star="2" style="padding-right: 5px"> <div class="kksr-icon" style="width: 24px; height: 24px;"></div> </p></div> <div class="kksr-star" data-star="3" style="padding-right: 5px"> <div class="kksr-icon" style="width: 24px; height: 24px;"></div> </p></div> <div class="kksr-star" data-star="4" style="padding-right: 5px"> <div class="kksr-icon" style="width: 24px; height: 24px;"></div> </p></div> <div class="kksr-star" data-star="5" style="padding-right: 5px"> <div class="kksr-icon" style="width: 24px; height: 24px;"></div> </p></div> </p></div> <div class="kksr-stars-active" style="width: 0px;"> <div class="kksr-star" style="padding-right: 5px"> <div class="kksr-icon" style="width: 24px; height: 24px;"></div> </p></div> <div class="kksr-star" style="padding-right: 5px"> <div class="kksr-icon" style="width: 24px; height: 24px;"></div> </p></div> <div class="kksr-star" style="padding-right: 5px"> <div class="kksr-icon" style="width: 24px; height: 24px;"></div> </p></div> <div class="kksr-star" style="padding-right: 5px"> <div class="kksr-icon" style="width: 24px; height: 24px;"></div> </p></div> <div class="kksr-star" style="padding-right: 5px"> <div class="kksr-icon" style="width: 24px; height: 24px;"></div> </p></div> </p></div> </div> <div class="kksr-legend" style="font-size: 19.2px;"> <span class="kksr-muted">Rate this post</span> </div> </div> <p class="has-global-color-8-background-color has-background"><strong>Summary:</strong> You can split a string using an empty separator using – <br /><strong>(i) list constructor <br />(ii) map+lambda <br />(iii) regex <br />(iv) list comprehension</strong></p> <h3><strong>Minimal Example:</strong></h3> <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="">text = '12345' # Using list() print(list(text)) # Using map+lambda print(list(map(lambda c: c, text))) # Using list comprehension print([x for x in text]) # Using regex import re # Approach 1 print([x for x in re.split('', text) if x != '']) # Approach 2 print(re.findall('.', text))</pre> <hr class="wp-block-separator has-alpha-channel-opacity" /> <h2>Problem Formulation</h2> <p class="has-global-color-8-background-color has-background"><img src="https://s.w.org/images/core/emoji/14.0.0/72x72/1f4dc.png" alt="?" class="wp-smiley" style="height: 1em; max-height: 1em;" /><strong>Problem: </strong>How to split a string using an empty string as a separator?</p> <p><strong>Example: </strong>Consider the following snippet – </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="">a = 'abcd' print(a.split(''))</pre> <p><strong>Output:</strong></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="">Traceback (most recent call last): File "C:\Users\SHUBHAM SAYON\PycharmProjects\Finxter\Blogs\Finxter.py", line 2, in <module> a.split('') ValueError: empty separator</pre> <p><strong>Expected Output: </strong></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="">['a', 'b', 'c', 'd']</pre> <p>So, this essentially means that when you try to split a string by using an empty string as the separator, you will get a ValueError. Thus, your task is to find out how to eliminate this error and split the string in a way such that each character of the string is separately stored as an item in a <a href="https://blog.finxter.com/python-lists/" target="_blank" rel="noreferrer noopener">list</a>. </p> <hr class="wp-block-separator has-alpha-channel-opacity" /> <p>Now that we have a clear picture of the problem let us dive into the solutions to solve the problem.</p> <h2>Method 1: Use <a href="https://blog.finxter.com/python-list/">list()</a></h2> <p><strong>Approach: </strong>Use the list() constructor and pass the given string as an argument within it as the input, which will split the string into separate characters. </p> <p><strong>Note: </strong><code>list()</code> creates a new list object that contains items obtained by iterating over the input iterable. Since a string is an iterable formed by combining a group of characters, hence, iterating over it using the <em>list</em> constructor yields a single character at each iteration which represents individual items in the newly formed list.</p> <p><strong>Code:</strong></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="">a = 'abcd' print(list(a)) # ['a', 'b', 'c', 'd']</pre> <p class="has-base-background-color has-background"><img src="https://s.w.org/images/core/emoji/14.0.0/72x72/1f30e.png" alt="?" class="wp-smiley" style="height: 1em; max-height: 1em;" />Related Read: <strong><a rel="noreferrer noopener" href="https://blog.finxter.com/python-list/" target="_blank">Python list() — A Simple Guide with Video</a></strong></p> <h2>Method 2: Use <a rel="noreferrer noopener" href="https://blog.finxter.com/python-map/" target="_blank">map()</a> and <a href="https://blog.finxter.com/a-simple-introduction-of-the-lambda-function-in-python/" target="_blank" rel="noreferrer noopener">lambda</a></h2> <p><strong>Approach: </strong>Use the <code>map()</code> to execute a certain lambda function on the given string. All you need to do is to create a lambda function that simply returns the character passed to it as the input to the map object. That’s it! However, the map method will return a map object, so you must convert it to a list using the <code>list()</code> function. </p> <p><strong>Code: </strong></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="">a = 'abcd' print(list(map(lambda c: c, a))) # ['a', 'b', 'c', 'd']</pre> <h2><strong>Method 3: Use a <a href="https://blog.finxter.com/list-comprehension/" target="_blank" rel="noreferrer noopener">list comprehension</a></strong></h2> <p><strong>Approach: </strong>Use a <a rel="noreferrer noopener" href="https://blog.finxter.com/list-comprehension/" target="_blank">list comprehension</a> that returns a new list containing each character of the given string as individual items. </p> <p><strong>Code:</strong></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="">a = 'abcd' print([x for x in a]) # ['a', 'b', 'c', 'd']</pre> <p class="has-base-background-color has-background"><img src="https://s.w.org/images/core/emoji/14.0.0/72x72/1f30e.png" alt="?" class="wp-smiley" style="height: 1em; max-height: 1em;" /><strong>Related Read: <a href="https://blog.finxter.com/list-comprehension/" target="_blank" rel="noreferrer noopener">List Comprehension in Python — A Helpful Illustrated Guide</a></strong></p> <h2>Method 4: Using regex</h2> <p>The <code>re.findall(pattern, string)</code> method scans <code>string</code> from <strong>left to right</strong>, searching for all <strong>non-overlapping matches</strong> of the <code>pattern</code>. It returns a <strong>list of strings</strong> in the matching order when scanning the string from left to right.</p> <p class="has-base-background-color has-background"><img src="https://s.w.org/images/core/emoji/14.0.0/72x72/1f30e.png" alt="?" class="wp-smiley" style="height: 1em; max-height: 1em;" /><strong>Related Read: <a href="https://blog.finxter.com/python-re-findall/" target="_blank" rel="noreferrer noopener">Python re.findall() – Everything You Need to Know</a></strong></p> <p><strong>Approach: </strong>Use the regular expression <code>re.findall('.',a)</code> that finds all characters in the given string ‘<code>a</code>‘ and stires them in a list as individual items. </p> <p><strong>Code:</strong></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="">import re a = 'abcd' print(re.findall('.',a)) # ['a', 'b', 'c', 'd']</pre> <p>Alternatively, you can also use the split method of the regex library in a list comprehension which returns each character of the string and eliminates empty strings. </p> <p><strong>Code:</strong></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="">import re a = 'abcd' print([x for x in re.split('',a) if x!='']) # ['a', 'b', 'c', 'd']</pre> <p class="has-base-background-color has-background"><img src="https://s.w.org/images/core/emoji/14.0.0/72x72/1f30e.png" alt="?" class="wp-smiley" style="height: 1em; max-height: 1em;" /><strong>Related Read: <a href="https://blog.finxter.com/python-regex-split/" target="_blank" rel="noreferrer noopener">Python Regex Split</a></strong></p> <p><strong><em>Do you want to master the regex superpower?</em></strong> Check out my new book <em><strong><a href="https://blog.finxter.com/ebook-the-smartest-way-to-learn-python-regex/" target="_blank" rel="noreferrer noopener" title="[eBook] The Smartest Way to Learn Python Regex">The Smartest Way to Learn Regular Expressions in Python</a></strong></em> with the innovative 3-step approach for active learning: (1) study a book chapter, (2) solve a code puzzle, and (3) watch an educational chapter video. </p> <h2>Conclusion</h2> <p>Hurrah! We have successfully solved the given problem using as many as four (five, to be honest) different ways. I hope this <a rel="noreferrer noopener" href="https://blog.finxter.com/" target="_blank">article</a> helped you and answered your queries. Please <a rel="noreferrer noopener" href="https://blog.finxter.com/subscribe" target="_blank">subscribe and stay tuned</a> for more interesting articles and solutions in the future.</p> <p>Happy coding! <img src="https://s.w.org/images/core/emoji/14.0.0/72x72/1f642.png" alt="?" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p> <hr class="wp-block-separator has-alpha-channel-opacity" /> <h2>Regex Humor</h2> <div class="wp-block-image"> <figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" src="https://blog.finxter.com/wp-content/uploads/2022/06/image-133.png" alt="" class="wp-image-428862" width="700" height="629" srcset="https://blog.finxter.com/wp-content/uploads/2022/06/image-133.png 785w, https://blog.finxter.com/wp-content/uploads/2022/06/image-133-300x270.png 300w, https://blog.finxter.com/wp-content/uploads/2022/06/image-133-768x691.png 768w" sizes="(max-width: 700px) 100vw, 700px" /><figcaption><em>Wait, forgot to escape a space. Wheeeeee[taptaptap]eeeeee.</em> (<a href="https://imgs.xkcd.com/comics/regular_expressions.png" data-type="URL" data-id="https://imgs.xkcd.com/comics/regular_expressions.png" target="_blank" rel="noreferrer noopener">source</a>)</figcaption></figure> </div> </div> https://www.sickgaming.net/blog/2022/11/27/python-split-string-empty-separator/ |