How To Count Substrings In A String With Python

3 Sep

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) < 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!


2 Responses to “How To Count Substrings In A String With Python”

  1. Phil September 15, 2012 at 11:35 pm #

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

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )


Connecting to %s