gpt4 book ai didi

python:[[1,2],[3,4],[5,6],[7,8]] 转化为 [[1],[2,3],[4,5],[6,7 ],[8]] 反之亦然

转载 作者:行者123 更新时间:2023-11-28 17:54:11 26 4
gpt4 key购买 nike

我目前的解决方案是

  • ether 通过迭代器类产生新的组装内部列表
  • 或通过生成新的组装内部列表的迭代器函数

还有其他更好的方法来解决这个挑战吗?

编辑

@Glenn:很好的反对意见。我没有想到这一点,因为我经历过没有按照我想的方式排序的列表。

@THC4k:感谢您的解决方案。我学会了 chain.from_iterable

@Mike DeSimone:嗯,测试了你的解决方案,但出了点问题,也许我还漏掉了什么,...

@Jamie 和 Odomontois:谢谢指点,要详细点

我的目标

我正在打造一个小算法来转换任务列表——对/元组:(开始,停止)——到一个简化的任务列表,其中重叠的任务合并在一起。

一个异常(exception):当一个事件与另一个事件完全重叠时,我的算法失败 (s1 s2 e2 e1 )

详细:

  • 我有一个成对的“任务列表”列表(类(class)学习 - 元组:)。
  • 每个元组由 2 个日期时间对象组成:开始和任务的结束。
  • 重要:“任务列表”的年表,其中顺序由开始决定,因为任务可能重叠
  • 'taskList' 包含几天,因此是 datetime 对象

例如,为了可读性,只是时间的字符串表示

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)]

最佳答案

好吧,这里是有 yield 的解决方案:

# transform forwards
def transform_pairs( lst ):
it = iter(lst)
a,last = next(it)
yield [a]
for a,b in it:
yield last, a
last = b
yield [last]

将列表转换回来应该看起来非常相似,但我会把它留给读者。

这是另一个稍微复杂一点的,可以双向变换。它产生元组,因为固定长度的列表lame

from itertools import chain

def transform( iterable, offset):
it = chain.from_iterable(iterable) # turn it back to one long list.
if offset:
yield next(it), # the trailing `,` makes this a tuple.
for item in it:
try:
x = next(it)
except StopIteration: # there is no 2nd item left
yield item,
else:
yield item, x # yield the pair

print list(transform(transform([[1,2],[3,4],[5,6],[7,8]], True), False))

关于python:[[1,2],[3,4],[5,6],[7,8]] 转化为 [[1],[2,3],[4,5],[6,7 ],[8]] 反之亦然,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3496634/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com