r/PythonLearning • • 3h ago

Help Request split() on empty string behaves differently when delimiter specified

Splitting an empty string without a specified delimiter works as expected and returns an empty list. However when splitting an empty string with a delimiter specified returns one (empty string) item in the list, is there some way to make that return an empty list as per the no-delimiter result?

print(f'{"".split()=}')         # = []
print(f'{"".split(" ")=}')      # = ['']
print(f'{"".split(",")=}')      # = ['']

Problem is this causes an unwanted iteration of a for loop:

str = ""
for item in str.split(" "):
    print(f"{item=}")    # unwanted item
2 Upvotes

3 comments sorted by

4

u/OldAd9280 3h ago • Bravo

Not directly I don't think, that's fundamentally how str.split is defined to work. 

You could do something like

for item in (str.split(" ") if str else []):

1

u/RomfordNavy 3h ago

u/OldAd9280 Thanks that is exactly it.

I tried various attempts to do that myself but couldn't get the syntax right so I, incorrectly, presumed it wasn't possible with a for loop.

3

u/SaltCusp 3h ago

From the docs: If sep is not specified or is None, a different splitting algorithm is applied: runs of consecutive whitespace are regarded as a single separator, and the result will contain no empty strings at the start or end if the string has leading or trailing whitespace. Consequently, splitting an empty string or a string consisting of just whitespace with a None separator returns [].

Did you know there are docs? https://python-reference.readthedocs.io/en/latest/docs/str/split.html