Given two lists of different lengths, the task is to write a Python program to get their elements alternatively and repeat the list elements of the smaller list till the larger list elements get exhausted.
Examples:
Input : test_list1 = ['a', 'b', 'c'], test_list2 = [5, 7, 3, 0, 1, 8, 4] Output : ['a', 5, 'b', 7, 'c', 3, 'a', 0, 'b', 1, 'c', 8, 'a', 4] Explanation : Alternate elements from 1st list are printed in cyclic manner once it gets exhausted. Then after exhaustion, again 1st list starts from 'a', with elements left in 2nd list. Input : test_list1 = [3, 8, 7], test_list2 = [5, 7, 3, 0, 1, 8] Output : [3, 5, 8, 7, 7, 3, 3, 0, 8, 1, 7, 8] Explanation : Alternate elements from 1st list are printed in cyclic manner once it gets exhausted. 3, 5, 8, 7, 7, 3.. Then after exhaustion, again 1st list starts from 3, with elements left in 2nd list
Method #1 : Using zip() + cycle() + list comprehension
In this, the repetition of elements in the smaller list is handled using cycle(), and joining is done using zip(). List comprehension performs the task of interleaving simultaneously.
Python3
# Python3 code to demonstrate working of # Repetitive Interleave 2 lists # Using zip() + cycle() + list comprehension from itertools import cycle # initializing lists test_list1 = list ( 'abc' ) test_list2 = [ 5 , 7 , 3 , 0 , 1 , 8 , 4 ] # printing original lists print ( "The original list 1 is : " + str (test_list1)) print ( "The original list 2 is : " + str (test_list2)) # zip() combining list, after Repetitiveness using cycle() res = [ele for comb in zip (cycle(test_list1), test_list2) for ele in comb] # printing result print ( "The interleaved list : " + str (res)) |
The original list 1 is : ['a', 'b', 'c'] The original list 2 is : [5, 7, 3, 0, 1, 8, 4] The interleaved list : ['a', 5, 'b', 7, 'c', 3, 'a', 0, 'b', 1, 'c', 8, 'a', 4]
Time Complexity: O(n2)
Auxiliary Space: O(n)
Method #2 : Using chain() + zip() + cycle()
Most operations as above method, the only difference being interleaving task is performed using chain().
Python3
# Python3 code to demonstrate working of # Repetitive Interleave 2 lists # Using chain() + zip() + cycle() from itertools import cycle, chain # initializing lists test_list1 = list ( 'abc' ) test_list2 = [ 5 , 7 , 3 , 0 , 1 , 8 , 4 ] # printing original lists print ( "The original list 1 is : " + str (test_list1)) print ( "The original list 2 is : " + str (test_list2)) # zip() combining list, after Repetitiveness using cycle() # chain() gets interleaved done res = list (chain( * zip (cycle(test_list1), test_list2))) # printing result print ( "The interleaved list : " + str (res)) |
The original list 1 is : ['a', 'b', 'c'] The original list 2 is : [5, 7, 3, 0, 1, 8, 4] The interleaved list : ['a', 5, 'b', 7, 'c', 3, 'a', 0, 'b', 1, 'c', 8, 'a', 4]
Time Complexity: O(n2)
Auxiliary Space: O(n)
Method 3: using the built-in function map().
Python3
from itertools import chain, cycle # initializing lists test_list1 = list ( 'abc' ) test_list2 = [ 5 , 7 , 3 , 0 , 1 , 8 , 4 ] # Interleaving the lists # using map() method res = list (chain( * map ( lambda x, y: [x, y], cycle(test_list1), test_list2))) # printing result print ( "The interleaved list : " + str (res)) |
The interleaved list : ['a', 5, 'b', 7, 'c', 3, 'a', 0, 'b', 1, 'c', 8, 'a', 4]
Time Complexity: O(n^2)
Auxiliary Space: O(n)