python - 从大字符串列表中创建新的字符串列表
问题描述
假设我有一个字符串数组,它们采用 YYYYMMDD 格式的日期格式。例如:
masterlist = ['20190701', '20190702', ... '20190731']
假设我想创建一个包含 3 个列表的新系列,长度分别为x
、y
和z
。对于这个例子,我们可以简单地说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
,只要列表是互斥的并且共同详尽即可。
实现这一目标的最简单方法是什么?
解决方案
您可以使用集合来执行此操作(假设我的 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']
这是找到集合之间的差异(它将返回第一个集合中不在第二个集合中的值),最后的数字是样本大小。
推荐阅读
- python - Ctypes 的回调有时会失败
- node.js - 在 mongoDB 中,如何根据 Details 数组中特定对象的值对文档进行排序?
- graphql - GraphQL - 需要为动态创建的表创建模式和查询
- c# - 如何用c#传输trc20
- javascript - Chrome 扩展 - 如何在选项卡中捕获 Ctrl + V(粘贴)
- python - 树莓派 4 上的 Python3 网络浏览器模块
- javascript - 函数使用多个异步接口 Promise MapSeries
- xslt-1.0 - 使用电子邮件设置 xslt 变量
- ruby-on-rails - Sidekiq + redis + docker-compose + rails
- c# - 如何在 c# 中使用预定义的字符串/字典设置 nunit 类别