Как создать дублирующий список в python - PullRequest
0 голосов
/ 06 августа 2020

Я хочу создать список дат, который содержит список дат одной недели, но каждая дата должна быть в этом списке 4 раза. вот так:

[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]

Я точно не знаю, как это сделать, но вот моя попытка:

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

Это просто создаст список дат одной недели но я хочу получить ответ в указанном выше формате. Может кто-нибудь помочь?

1 Ответ

1 голос
/ 06 августа 2020

Как дублировать элементы в списке

Решение состоит в том, чтобы создать различные списки, в которых каждый элемент вашего основного списка повторяется N раз. В этом примере я продублирую каждый элемент четыре раза, поэтому:

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]]

Но теперь у вас будет список списков, поэтому вам нужно преобразовать этот результат в список элементов, эти операции позвонил квартира . Чтобы сделать это в python, вы можете использовать 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]

Вы можете избежать использования операции *, вызвав 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]

Следовательно, это код, который делает то, что вы хотите:

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...