【发布时间】:2016-07-09 16:05:53
【问题描述】:
考虑这个列表:
dates = [
('2015-02-03', 'name1'),
('2015-02-04', 'nameg'),
('2015-02-04', 'name5'),
('2015-02-05', 'nameh'),
('1929-03-12', 'name4'),
('2023-07-01', 'name7'),
('2015-02-07', 'name0'),
('2015-02-08', 'nameh'),
('2015-02-15', 'namex'),
('2015-02-09', 'namew'),
('1980-12-23', 'name2'),
('2015-02-12', 'namen'),
('2015-02-13', 'named'),
]
我如何识别那些乱序的日期。我不在乎他们是否重复或跳过,我只需要那些不合时宜的方式。即,我应该回来:
('1929-03-12', 'name4'),
('2023-07-01', 'name7'),
('2015-02-15', 'namex'),
('1980-12-23', 'name2'),
Namex 不太明显,但不在列表的一般顺序中。
我的简单开头(我为了简化问题而删除了)显然是不完整的。
更新:基于 cmets,Longest Increase Subsequence (LIS) 的实现似乎可以帮助我入门,这里可以找到一个 python 实现:
- https://stackoverflow.com/a/9832414/1061836
- How to determine the longest increasing subsequence using dynamic programming?
- https://rosettacode.org/wiki/Longest_increasing_subsequence#Python
- https://codereview.stackexchange.com/questions/10230/python-implementation-of-the-longest-increasing-subsequence
似乎一旦我获得了 LIS,我就可以将它与原始列表进行比较,看看差距在哪里……令人着迷。 SO 是令人敬畏的蜂巢思维。
【问题讨论】:
-
我们如何判断
namex出现故障? -
请更准确地定义您的“乱序”
-
计算“平均值”和标准差,找到超出两个标准差的任何值?
-
ok ok... 引用和去错字。教我写草率的差不多代码;)