Vesper
Vesper

Reputation: 845

How to create a duplicate list in python

I want to create a date list that- contains the list of dates of one week but each date should be there 4 times in that list. like this:

[1-jan-2018, 1-jan-2018, 1-jan-2018, 1-jan-2018, 2-jan-2018, 2-jan-2018, 2-jan-2018, 2-jan-2018, 3-jan-2018, 3-jan-2018, 3-jan-2018, 3-jan-2018, 4-jan-2018, 4-jan-2018, 4-jan-2018, 4-jan-2018, 5-jan-2018, 5-jan-2018, 5-jan-2018, 5-jan-2018, 6-jan-2018, 6-jan-2018, 6-jan-2018, 6-jan-2018,7-jan-2018, 7-jan-2018, 7-jan-2018, 7-jan-2018]

I don't exactly have the idea how to do it but here is my attempt:

import pandas as pd
timeSeries = list(pd.date_range(start='1/1/2020', end='7/1/2020')) 
print(timeSeries)

This will just create the list of dates of one week but I want the answer in the above format. Can someone please help?

Upvotes: 1

Views: 197

Answers (1)

iuridiniz
iuridiniz

Reputation: 2433

How to duplicate items in a list

A solution is create various list with each element of your primary list repeated N time. In this example, I will duplicated each element four times, so:

old_list = [1,2,3,4]
# [i,i,i,i] will clone each item four times.
new_list = list([i,i,i,i] for i in old_list)
# new_list = [[1, 1, 1, 1], [2, 2, 2, 2], [3, 3, 3, 3], [4, 4, 4, 4]]

But, now you will have a list of lists, so you need to transform that result into a list of elements, this operation is called flat. In order to do this in python, you can use the itertools.chain.

import itertools
old_list = [1,2,3,4]
# [i,i,i,i] will clone each item four times.
new_list = list([i,i,i,i] for i in old_list)
# new_list = [[1, 1, 1, 1], [2, 2, 2, 2], [3, 3, 3, 3], [4, 4, 4, 4]]
new_list_flatten = list(itertools.chain(*new_list))
# new_list_flatten = [1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4]

You can avoid the usage of * operation by calling itertools.chain.from_iterable:

import itertools
old_list = [1,2,3,4]
# [i,i,i,i] will clone each item four times.
new_list = list([i,i,i,i] for i in old_list)
# new_list = [[1, 1, 1, 1], [2, 2, 2, 2], [3, 3, 3, 3], [4, 4, 4, 4]]
new_list_flatten = list(itertools.chain.from_iterable(new_list))
# new_list_flatten = [1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4]

Therefore, this is a code that do what you want:

import itertools
import pandas as pd
time_series = list(pd.date_range(start='1/1/2020', end='7/1/2020')) 
newseries = list( itertools.chain.from_iterable((i,i,i,i) for i in time_series) )
print(newseries)

Upvotes: 2

Related Questions