# How To Count Substrings In A String With Python

I’m still working on the CodingBat Python exercises, and have found this problem a bit challenging to put into one line of code:

Given a string, return the count of the number of times that a substring length 2 appears in the string and also as the last 2 chars of the string, so “hixxxhi” yields 1 (we won’t count the end substring).

last2(‘hixxhi’) → 1
last2(‘xaxxaxaxx’) → 1
last2(‘axxxaaxx’) → 2

After a few minutes of thinking through it and checking out this answer on StackOverflow, I’ve come up with a solution!

But first, I wanted to share the long solution provided by CodingBat:

```def last2(str):
# Screen out too-short string case.
if len(str) &lt; 2:
return 0

# last 2 chars, can be written as str[-2:]
last2 = str[len(str)-2:]
count = 0

# Check each substring length 2 starting at i
for i in range(len(str)-2):
sub = str[i:i+2]
if sub == last2:
count = count + 1

return count
```

Here is how you can put it into one line of code 🙂

```def last2(str):
return len([i for i in range(len(str) - 2) if str[i:i+2] == str[-2:]])
```

Can you think of an alternative way of solving this problem in one line of code?! If so, please share!

Enjoy the article? Join over 20,000+ Swift developers and enthusiasts who get my weekly updates.

• Hey Natasha, just worked through this one and I really love your solution. Super elegant.

• Thanks Phil!

• LAAGameWorld

def count_sub(substr, string):
pos = string.find(substr)
if pos == -1:
return 0
return 1+count_sub(substr, string[pos+len(substr):])