Python | Append Odd element twice

Given a list of numbers, the task is to create a new list from the initial list with the condition to append every odd element twice. Below are some ways to achieve the above task.
Method #1: Using list comprehension
Python3
# Python code to create a new list from initial list# with condition to append every odd element twice.# List initializationInput = [1, 2, 3, 8, 9, 11]# Using list comprehension Output = [elem for x in Input for elem in (x, )*(x % 2 + 1)]# printing print("Initial list is:'", Input)print("New list is:", Output) | 
Initial list is:' [1, 2, 3, 8, 9, 11] New list is: [1, 1, 2, 3, 3, 8, 9, 9, 11, 11]
Time Complexity: O(n), Here n is the size of the list.
Auxiliary Space: O(n)
Method #2: Using itertools
Python3
# Python code to create a new list from initial list# with condition to append every odd element twice.# Importingfrom itertools import chain# List initializationInput = [1, 2, 3, 8, 9, 11]# Using list comprehension and chainOutput = list(chain.from_iterable([i]             if i % 2 == 0 else [i]*2 for i in Input))# printing print("Initial list is:'", Input)print("New list is:", Output) | 
Initial list is:' [1, 2, 3, 8, 9, 11] New list is: [1, 1, 2, 3, 3, 8, 9, 9, 11, 11]
Time Complexity: O(n), Here n is the size of the list.
Auxiliary Space: O(n)
Method #3: Using Numpy array
Python3
# Python code to create a new list from initial list# with condition to append every odd element twice.# Importingimport numpy as np# List initializationInput = [1, 2, 3, 8, 9, 11]Output = []# Using Numpy repeatfor x in Input:    (Output.extend(np.repeat(x, 2, axis = 0))      if x % 2 == 1 else Output.append(x))# printing print("Initial list is:'", Input)print("New list is:", Output) | 
Output:
Initial list is: [1, 2, 3, 8, 9, 11] New list is: [1, 1, 2, 3, 3, 8, 9, 9, 11, 11]
Time Complexity: O(n), Here n is the size of the list.
Auxiliary Space: O(n)
Method #4 : Using extend() method
Python3
# Python code to create a new list from initial list# with condition to append every odd element twice.# List initializationInput = [1, 2, 3, 8, 9, 11]Output = []for i in Input:    if(i%2!=0):        Output.extend([i]*2)    else:        Output.append(i)# printingprint("Initial list is:", Input)print("New list is:", Output) | 
Initial list is:' [1, 2, 3, 8, 9, 11] New list is: [1, 1, 2, 3, 3, 8, 9, 9, 11, 11]
Time Complexity : O(N)
Auxiliary Space : O(N)
Method#5: Using Recursive method.
The algorithm creates a new list from the input list with the condition to append every odd element twice, using a recursive function.
- Define a function append_odd_twice that takes an input list as its argument.
 - If the input list is empty, return an empty list (base case).
 - Otherwise, if the first element of the input list is odd, append it twice to the output list, otherwise append it once.
 - Recursively call the function with the rest of the input list and append the result to the output list.
 - Return the output list.
 
Python3
def append_odd_twice(input_list):    # Base case: if the input list is empty, return an empty list    if not input_list:        return []    else:        # Recursive case: if the first element of the input list is odd,        # append it twice to the output list, otherwise append it once.        if input_list[0] % 2 == 1:            return [input_list[0], input_list[0]] + append_odd_twice(input_list[1:])        else:            return [input_list[0]] + append_odd_twice(input_list[1:])# List initializationinput_list = [1, 2, 3, 8, 9, 11]# Call the recursive function to create the new listoutput_list = append_odd_twice(input_list)# Print the resultsprint("Initial list is:", input_list)print("New list is:", output_list) | 
Initial list is: [1, 2, 3, 8, 9, 11] New list is: [1, 1, 2, 3, 3, 8, 9, 9, 11, 11]
The time complexity of the algorithm is O(n), where n is the length of the input list. The recursive function performs a constant amount of work for each element in the list.
The space complexity of the algorithm is also O(n), since the recursive function creates a new list for each recursive call.
				
					


