首页 > 解决方案 > 从大字符串列表中创建新的字符串列表

问题描述

假设我有一个字符串数组,它们采用 YYYYMMDD 格式的日期格式。例如:

 masterlist = ['20190701', '20190702', ... '20190731'] 

假设我想创建一个包含 3 个列表的新系列,长度分别为xyz。对于这个例子,我们可以简单地说x = 20, y = 10, 和z = 1。格式是这样的,我想遍历所有元素masterlist以设置为z. 从这里,我想取 20 个不包含 z 中日期的随机日期并将它们分配给x. 最后,那些不在x或中的日期z将留给y。换句话说,任何列表都不应该有相同的日期。

例如:

z = ['20190701']
x = ['20190702', ... , '20190721']
y = ['20190722', ... , '20190731']

还有一个:

z = ['20190702']
x = ['20190701', '20190703', ..., '20190720']
y = ['20190722', ... , '20190731']

x和/或之间的顺序或随机混合无关紧要y,只要列表是互斥的并且共同详尽即可。

实现这一目标的最简单方法是什么?

标签: pythonarraysstringlistmatch

解决方案


您可以使用集合来执行此操作(假设我的 z=1、x=2、y=1 和 masterlist=5)

import random
masterlist = ['20190701', '20190702', '20190703', '20190704', '20190705']
z = random.sample(masterlist, 1)
x = random.sample((set(masterlist) - set(z)), 2)
y = random.sample(((set(masterlist) - set(x)) - set(z)), 1)
# z ['20190702']
# x ['20190701', '20190705']
# y ['20190704']

这是找到集合之间的差异(它将返回第一个集合中不在第二个集合中的值),最后的数字是样本大小。


推荐阅读