【发布时间】:2010-08-16 19:33:11
【问题描述】:
我目前的解决方案指针是
- ether 通过生成新组装的内部列表的迭代器类
- 或通过生成新组装的内部列表的迭代函数
还有其他更好的方法来解决这个挑战吗?
编辑
@Glenn:很好的反对意见。 我没有想到这一点,因为我遇到的列表没有按照我想象的方式排序。
@THC4k:感谢您的解决方案。我学会了chain.from_iterable
@Mike DeSimone:嗯,测试了你的解决方案,但出了点问题,也许我错过了什么,...
@Jamie 和 Odomontois: 感谢您指出更详细的内容
我的目标
我正在锻造一个小算法,它可以转换任务列表 - 对/元组:(start,stop) - 到一个简化的任务列表,其中重叠的任务合并在一起。
一个例外:当一个事件与另一个事件完全重叠时,我的算法失败(s1 s2 e2 e1)
详细说明:
- 我有一个成对列表“taskList”(课程 学到了 - 元组:)。
- 每个元组 由 2 个日期时间对象组成:开始 和任务的结束。
- 重要: 'taskList' 的年表 顺序由开始决定,因为 任务可能重叠
- 'taskList' 包含几天,因此是日期时间对象
例如,为了便于阅读,只是时间的字符串表示
taskList = [(9:00,10:00),(9:30,11:00),(11:00,12:30),(13:30,14:00),(14:00,18:00)]
最终结果:
result = [(9:00,12:30), (13:30,18:00)]
现在我的想法是,当我以我质疑的方式重新排列“任务列表”时
taskListT1 = [(9:00,),(10:00,9:30),(11:00,11:00),(12:30,13:30),(14:00,14:00),(18:00,)]
现在我可以消除那些 a >= b 的元组 (a,b):
taskListT2 = [(9:00,),(12:30,13:30),(18:00,)]
然后转换回来:
result = [(9:00,12:30), (13:30,18:00)]
【问题讨论】:
-
您必须提供更多输入/输出示例,以便我们知道您想要做什么
-
遍历它们并复制。试图弄清楚究竟是什么“技巧”会做出这样的事情,这真是太可怕了。你花在试图找出一个很酷的解决方案上的每一分钟都是一分钟,每个未来接触过你的代码的人都将不得不花费一分钟来破译你的小把戏。如果您在编程时它不仅是自动的,请不要这样做。如果您对一种模式非常满意以至于它是自动的,那么您可能还会知道何时使用它以及何时更明确。
-
如果某个嵌套列表长度 > 2 怎么办?
-
您确定不应该只存储一个平面列表
[1,2,3,4,5,6,7,8],并改变迭代它们的方式而不是来回转换列表吗? -
哇,自从我第一次看到这个问题以来,这个问题已经改变了。
标签: python list python-3.x swap