python merge sort implementation results in nested lists -
i'm attempting implement merge sort in python
#!/usr/bin/python import math def merge_sort(unsorted): if(len(unsorted)<2): return unsorted middle = int(math.floor(len(unsorted)/2)) left = merge_sort(unsorted[0:middle]) right = merge_sort(unsorted[middle:]) return merge(left, right) def merge(left, right): results = [] while (len(left) > 0 , len(right) > 0 ): if(left[0] < right[0]): results.append(left.pop(0) ) else: results.append( right.pop(0)) if (len(left) > 0): results.append(left) if (len(right) > 0): results.append(right) return results print merge_sort(list('7123'))
however result looks [['1'], ['2'], ['3'], [['7']]]
instead of ['7', '1', '2', '3']
.
what's error in syntax?
use list.extend
here:
if (len(left) > 0): results.extend(left) if (len(right) > 0): results.extend(right)
list.append
vs list.extend
:
>>> lis = [1, 2 , 3] >>> lis.append( [4, 5] ) #appends whole object @ end of list >>> lis [1, 2, 3, [4, 5]] >>> lis.extend( [6, 7] ) #appends individual items iterable >>> lis [1, 2, 3, [4, 5], 6, 7]
help on list.extend
:
>>> print list.extend.__doc__ l.extend(iterable) -- extend list appending elements iterable
Comments
Post a Comment