# Python – Split String After K-th Occurrence of Separator

## Coding Challenge

π¬ Question: Given a Python string. How to split the string after the k-th occurrence of the separator (string or character)? In other words: how to ignore the first (k-1) separator occurrences when splitting a string?

Here are three examples:

1. `'a-b-c-d-e-f-g-h'`, `k=2`, and `sep='-'` should be split to `['a-b', 'c', 'd', 'e', 'f', 'g', 'h']`
2. `'helloxxxworldxxxpythonxxxisxxxgreat'`, `k=3`, and `sep='xxx'` should be split to `['helloxxxworldxxxpython', 'is', 'great']`
3. Border case: `'a-b'`, `k=100`, and `sep='-'` should be split to `['a-b']`

π Related Tutorial: Python Split String After Second Occurrence

## Solution

You can split a string after the k-th occurrence of a given character in three steps:

1. First, split the whole string using the separator sep in `s.split(sep)`.
2. Second, combine the first k elements of the resulting split list using the `sep.join()` method call.
3. Third, use slicing and list concatenation to create a new result list.

The following code creates a function that takes as input a string `s`, an integer `k`, and a separator string `sep` and splits the string at the `k`-th occurrence of the separator:

```def my_split(s, k, sep):
all_split = s.split(sep)
return [sep.join(all_split[0:k])] + all_split[k:]

print(my_split('a-b-c-d-e-f-g-h', k=2, sep='-'))
# ['a-b', 'c', 'd', 'e', 'f', 'g', 'h']

print(my_split('helloxxxworldxxxpythonxxxisxxxgreat', k=3, sep='xxx'))
# ['helloxxxworldxxxpython', 'is', 'great']

print(my_split('a-b', k=100, sep='-'))
# ['a-b']```

## Explanations

The code does multiple things.

First, it creates a list `all_split` by splitting the string `s` using separator `sep`. For example, when using it on string `'a-b-c-d-e-f-g-h'` and `sep='-'`, it would return `['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']`.

π Recommended Tutorial: Python String Split

Second, it combines the first `k` elements using the separator string `sep` between them by running `sep.join(all_split[0:k])`.

Recommended Tutorials: π

Third, it puts the result into a list using the square bracket notation, i.e., we get a list with one string element `['a-b']` for our example.

π Recommended Tutorial: How to Create a Python List?

Fourth, you concatenate this list with the remaining `all_split` list, ignoring the first k split results, that are already merged to ignore the first split, by using the slicing expression `all_split[k:]`.

In our example, we get `['a-b']` and `['c', 'd', 'e', 'f', 'g', 'h']` that concatenates to `['a-b', 'c', 'd', 'e', 'f', 'g', 'h']`.

π Recommended Tutorials: List Concatenation in Python