【发布时间】:2013-11-09 11:24:51
【问题描述】:
我有一个 Python list 和 tuples,其中包含三个对象:string(例如:标题)、date 和另一个 string(例如:名称)。
示例:
scientific_works = [
('SW 1', datetime.date(2000, 10, 15), 'auth 1'),
('SW 2', datetime.date(2000, 11, 3), 'auth 1'),
('SW 3', datetime.date(2000, 11, 4), 'auth 1'),
('SW 4', datetime.date(2000, 12, 1), 'auth 1'),
]
那么我有一个模式:
从date 到date,(至少)int 项目从list 每int 天/周/月/年
例子:
from datetime.date(2000, 11, 1)
until datetime.date(2000, 11, 30)
1 item per day
我希望算法做什么:
- 鉴于该列表和该模式,过滤后的项目是否符合规则?
在示例的情况下,此模式将匹配 2 个项目,它们都与此处的规则匹配:1 item complete per day,但是,由于没有 an item 用于每个日期块,因此算法将返回 false .
另一个例子:
- 每个 Int_2(天/周/月)是否有(至少)Int_1 数量的项目(作品)?
- 每天 1 个工作意味着在给定的日期范围内,每 1 天块至少有 1 个项目。每周 2 件作品意味着,日期范围内每周(或 7 天块)至少 2 件作品。
当然,我可以遍历列表并找出哪些项目与 from 和 until 模式匹配。
但是,我真的很困惑将它们与其余规则匹配以查看它是正匹配还是负匹配。
我的问题:
- 如何构建算法,为其提供列表和规则模式(每天或每周或每月或每年 x 项),并查看它是否匹配?
我正在为一个应用程序开发一个小组件,其中给定了特定的数据(列表)和规则(模式),如果作者解锁了奖励。
我已经完成了 udacity 的几个 Python 课程,包括大多数算法,但真的找不到解决办法。
到目前为止,我想到了这个:
- 过滤具有给定日期范围的列表项。
- 计算范围内的范围块:从 d1 到 d2 的 1 天 = 5 天 - 从 d1 到 d2 的 1 周 = 3 周
- 在上面计算的
int范围内创建一个循环。 - 在循环的每个步骤中将周、月、年转换为天。
- 将金额添加到开始日期并查看项目是否与日期范围匹配。
- 将金额添加到日期范围的下一个开始并重复。
但是,这不起作用,我认为将块转换为天根本没有效率。
谢谢。
【问题讨论】:
-
现在回到stackoverflow上最常见的问题。你试过什么?
-
@alKid,感谢您的评论。我实现了日期范围的第一次过滤。其余的,我在纸上画了模式,并试图想出一个过程(算法),但我失败了,因为我不知道从哪里开始。
-
时间段的开始日期或日历日期何时开始?例如,
[date(2000, 6, 15), date(2001, 1, 1)]列表是否匹配模式:from datetime.date(2000, 6, 14) until datetime.date(2001, 6, 1) 2 item per year? -
结束日期和开始日期是否包括在内都没有关系。基本上,该算法是看,比如说,一位科学家,是否在从 - 到日期之间每月发表一篇或更多论文,或者一个骑自行车的人是否每周练习一次,或者一个学生是否每天上学一次,持续 5 天。过滤的日期范围是最简单的,我已经介绍了,但其他部分——将模式匹配到列表真/假被证明是困难的。谢谢,非常感谢您的帮助!
-
@Phil:这与包容性无关。该列表包含两个不同的日历年 - 每年 一个 日期。但是当一年(如 两个 项。你看到矛盾了吗?您能否回答上一条评论中的问题:列表是否与模式匹配?
标签: python algorithm python-2.7 pattern-matching