假设我有一个YYYYMMDD格式的365个日期的主数组。出于这个示例的缘故,我想创建3个不同的列表,这些列表是唯一的,但也用完了整个365个日期。
作为一个整体示例,让我们以2017年为例。我想从365天中创建3个相互排斥且集体详尽的列表。换句话说,array1中的日期都不会在array2或array3中,并且array2中的日期也不会在array3中。 Array1的长度为300,array2的长度为64,而array3的长度仅为1。
我知道这可以通过列表和集合来实现,并且可以通过包含“ not in”来实现,但是我一直在圈子里没有任何工作。像这样的问题的最佳解决方案是什么?
答案 0 :(得分:3)
也许使用shuffle随机化数组,然后拆分生成的shuffled列表?
shuffle(arr)
arr1 = arr[0:300]
arr2 = arr[300:364]
arr3 = arr[364:365]
答案 1 :(得分:0)
我可以用熊猫轻松地创建日期,转换成一个numpy数组,然后使用numpy.random.shuffle
:
import pandas as pd
import numpy as np
list_of_dates = pd.date_range('2019-01-01', periods=365, freq='D') #Creates the list with all the dates for the year 2019.
dates = np.array(list_of_dates) #Transform it into a np.array to apply random.shuffle() later
np.random.shuffle(dates) #randomize the order of the list
list_1 = dates[0:300] #create 1st list
list_2 = dates[301:364] #create 2nd list
list_3 = dates[364:-1] #create 3rd list
测试:
print(list_1[0:3])
输出:
['2019-01-19T00:00:00.000000000' '2019-04-04T00:00:00.000000000'
'2019-03-10T00:00:00.000000000']