How to Sort the Odd in Python
The challenge
You will be given an array of numbers. You have to sort the odd numbers in ascending order while leaving the even numbers at their original positions.
Examples
[7, 1] => [1, 7]
[5, 8, 6, 3, 4] => [3, 8, 6, 5, 4]
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0] => [1, 8, 3, 6, 5, 4, 7, 2, 9, 0]
The solution in Python code
Option 1:
def sort_array(arr):
odds = sorted((x for x in arr if x%2 != 0), reverse=True)
return [x if x%2==0 else odds.pop() for x in arr]
Option 2:
def sort_array(source_array):
result = sorted([l for l in source_array if l % 2 == 1])
for index, item in enumerate(source_array):
if item % 2 == 0:
result.insert(index, item)
return result
Option 3:
def sort_array(source_array):
odd = sorted(list(filter(lambda x: x % 2, source_array)))
l, c = [], 0
for i in source_array:
if i in odd:
l.append(odd[c])
c += 1
else:
l.append(i)
return l
Test cases to validate our solution
test.assert_equals(sort_array([5, 3, 2, 8, 1, 4]), [1, 3, 2, 8, 5, 4])
test.assert_equals(sort_array([5, 3, 1, 8, 0]), [1, 3, 5, 8, 0])
test.assert_equals(sort_array([]),[])