Posts

Merge Sort Implementation in Python

Today I post the python implementation of merge sort. This is straight-forward implementation of the algorithm presented in the book Introduction to Algorithms [CLRS]. If you think the implementation can be more Pythonic, feel free to comment. Here is my code: def merge(li, start, mid, end): left_li = [] left_li.extend(li[start : mid+1]) right_li = [] right_li.extend(li[mid+1: end+1]) left_li.append(2147483647) right_li.append(2147483647) i = 0 j = 0 for k in range(start, end+1): if left_li[i] You can test the merge sort implementation against this problem: http://www.spoj.com/problems/MERGSORT/

recursive binary search in python

In my previous post, I showed the iterative way to implement binary search algorithm in Python. Here comes the recursive way. def binary_search_recursive(li, left, right, key): while True: if left > right: return -1 mid = (left + right) / 2 if li[mid] == key: return mid if li[mid] > key: right = mid - 1 else: left = mid + 1 return binary_search_recursive(li, left, right, key) if __name__ == "__main__": li = [1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12] left = 0 right = len(li) for key in [8, 6, 1, 12, 7]: index = binary_search_recursive(li, left, right, key) print key, index

iterative binary search in python

Today I am going to post the code for binary search. This one is iterative and the next one will be recursive. If you don't know about binary search, please read the wikipedia article first. Now, here is my Python implementation of binary search algorithm: def binary_search_iterative(li, left, right, key): while True: if left > right: return -1 mid = (left + right) / 2 if li[mid] == key: return mid if li[mid] > key: right = mid - 1 else: left = mid + 1 if __name__ == "__main__": li = [1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12] left = 0 right = len(li) for key in [8, 6, 1, 12, 7]: index = binary_search_iterative(li, left, right, key) print key, index

insertion sort implementation in python

I am working on my Python coding skills and this time reviewing various algorithms with which I have not been in touch for many days. So I start with sorting, here is my code for insertion sort: def insertion_sort(ara): for j in range(1, len(ara)): key = ara[j] i = j - 1 while i >= 0 and key More python implementation of various algorithms are coming soon. Meanwhile if you feel that there is chance to improve my code, or make it more pythonic, please feel free to comment. Oh, if you are not familiar with algorithms yet and wording what the ... is insertion sort, please visit the wikipedia article on insertion sort .

scrape macy's deals using beautiful soup

Let me show you a tiny real example on how to use the bs4 (beautiful soup version 4) module of Python. Say we want to collect information about the hot deals from macy's. The URL is here . Well, you can see all the info in one page and copy-paste, but that's not our purpose. First you have to get the content of the page using the cute requests module. import requests url = 'http://bit.ly/19zWmQT' r = requests.get(url) html_content = r.text Now start cooking the soup: from bs4 import BeautifulSoup soup = BeautifulSoup(html_content) Now look at the html code (page source code) of the url. You will see that the offers are in a list (li) that has 'offer' as a css class name (and some other class names). So you can write the code in the following way: offer_list = soup('li', 'offer') Or you can write: offer_list = soup.find_all('li', 'offer') Another way to write this is: offer_list = soup.select('li.offer') ...

PHP like trim function in Python

Does python have any trim() function (like php) to remove the leading and trailing whitespace? Answer is yes and it's called strip. Here is the code: >>> str = ' aa b cde ' >>> str ' aa b cde ' >>> str.strip() 'aa b cde' >>> str = str.strip() >>> str 'aa b cde' >>> Happy Coding! :)

calculate age from date of birth

I just needed to write a function in python that calculates age from birthday (date of birth). In stackoverflow I found couple of good discussions here and here . I picked up the following code from the later post, as it's very simple and works for my purpose: def calculate_age(born): today = date.today() try: birthday = born.replace(year=today.year) except ValueError: # raised when birth date is February 29 and the current year is not a leap year birthday = born.replace(year=today.year, day=born.day-1) if birthday > today: return today.year - born.year - 1 else: return today.year - born.year if __name__ == "__main__": day, month, year = [int(x) for x in "7/11/1982".split("/")] born = date(year, month, day) print calculate_age(born)