【发布时间】:2009-08-23 16:23:20
【问题描述】:
使用 Python 如何通过有序子集匹配 [[..],[..],..] 减少列表列表?
在这个问题的上下文中,列表 L 是列表 M 的 子集,如果 M 包含 L 的所有成员,并且在同一命令。例如,列表 [1,2] 是列表 [1,2,3] 的子集,但不是列表 [2,1,3] 的子集。
示例输入:
a. [[1, 2, 4, 8], [1, 2, 4, 5, 6], [1, 2, 3], [2, 3, 21], [1, 2, 3, 4], [1, 2, 3, 4, 5, 6, 7]]
b. [[2, 16, 17], [1, 2, 3, 4, 5, 6, 7], [1], [1, 2, 3, 4], [1, 2], [17, 18, 19, 22, 41, 48], [2, 3], [1, 2, 3], [50, 69], [1, 2, 3], [2, 3, 21], [1, 2, 3], [1, 2, 4, 8], [1, 2, 4, 5, 6]]
预期结果:
a. [[1, 2, 4, 8], [2, 3, 21], [1, 2, 3, 4, 5, 6, 7]]
b. [[2, 16, 17], [1, 2, 3, 4, 5, 6, 7], [17, 18, 19, 22, 41, 48], [50, 69], [2, 3, 21], [1, 2, 4, 8], [1, 2, 4, 5, 6]]
更多例子:
L = [[1, 2, 3, 4, 5, 6, 7], [1, 2, 5, 6]] - 没有减少
L = [[1, 2, 3, 4, 5, 6, 7], , [1, 2, 3][1, 2, 4, 8]] - 是减少
L = [[1, 2, 3, 4, 5, 6, 7], [7, 6, 5, 4, 3, 2, 1]] - 没有减少
(很抱歉造成与不正确的数据集混淆。)
【问题讨论】:
-
什么是超集列表?它是不是作为另一个子集出现的任何集合?
-
结果中不应该出现 [1,2,4,5,6] 吗?
-
不,根据问题定义,[1,2,4,5,6] 是 [1, 2, 3, 4, 5, 6, 7] 的“子集”。
-
我认为您需要生成一组确定的测试用例 - 我很乐意针对它们编写代码。看来我的答案都不是完全正确的。
-
我不明白。由于 [1,2,3,4,5,6,7] 而在一个测试数据集中省略了 [1,2,4,5,6] 但在这个测试数据中没有? [[1, 2, 3, 4, 5, 6, 7], [1, 2, 4, 5, 6]] 我读错了“No reduce”评论吗?