从样本创建3个互斥且详尽无遗的列表

时间:2019-11-07 19:29:59

标签: python list set union

假设我有一个YYYYMMDD格式的365个日期的主数组。出于这个示例的缘故,我想创建3个不同的列表,这些列表是唯一的,但也用完了整个365个日期。

作为一个整体示例,让我们以2017年为例。我想从365天中创建3个相互排斥且集体详尽的列表。换句话说,array1中的日期都不会在array2或array3中,并且array2中的日期也不会在array3中。 Array1的长度为300,array2的长度为64,而array3的长度仅为1。

我知道这可以通过列表和集合来实现,并且可以通过包含“ not in”来实现,但是我一直在圈子里没有任何工作。像这样的问题的最佳解决方案是什么?

2 个答案:

答案 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']