Jul-20-2017, 08:30 PM
#!/usr/bin/env/python3 original_list = [1,5,3,2,7,7,3,2,7] def sort_odds(lst): sorted_odds = sorted([n for n in lst if n%2]) new_list = [] for n in lst: if n%2: new_list.append(sorted_odds.pop(0)) else: new_list.append(n) return list(new_list) print(sort_odds(original_list))if efficiency is concern, you may use collections.deque to optimize the popleft operation
#!/usr/bin/env/python3 from collections import deque original_list = [1,5,3,2,7,7,3,2,7] def sort_odds(lst): sorted_odds = deque(sorted([n for n in lst if n%2])) #using deque to optimize pop new_list = [] for n in lst: if n%2: new_list.append(sorted_odds.popleft()) else: new_list.append(n) return list(new_list) print(sort_odds(original_list))