gpt4 book ai didi

python - 如何确定性地交错 N 个不同长度的异构列表?

转载 作者:行者123 更新时间:2023-11-28 18:39:23 24 4
gpt4 key购买 nike

这是我的目标:我有 N 个列表(假设 N=3),每个列表包含不同类型的项目,我需要生成一个列表 包含所有这些,尽量减少相同类型的相邻项目的数量

我个人使用 python,但任何伪代码解决方案都可以接受。

例子:

A = [a1, a2, a3]
B = [b1, b2]
C = [c1, c2, c3, c4]

OUT = f(A, B, C)
> [a1, b1, c1, a2, b2, c2, a3, c3, c4]

在上面的示例中,我只是同时迭代 3 个列表并从每个列表中选择一个项目,直到每个项目都被取走。它非常简单、快速且具有确定性。(注意:相邻相似项的数量并未最佳地最小化,但可以说在大多数用例中是可以容忍的)

但是

我宁愿避免 a,b,c,a,b,c,... 模式,让它看起来更“自然”,尽管仍然确定性(阅读:相同的输入,相同的输出)。

例子:

OUT = [a1, b1, c1, b2, a2, c2, a3, c3, c4]

有什么建议吗?

附言举一个真实世界的例子,让我们想象一下这 3 个列表包含 3 种不同类型的文章(新闻、教程和评论),我们正在为我们的博客生成建议/推荐文章列表。

最佳答案

这是我的建议:

import random

def mix(ls):
random.seed(0)

final_length = sum([len(l) for l in ls])
r = []
while len(r) < final_length:
l = ls[random.randint(0, len(ls) - 1)]
if len(l) > 0:
r.append(l.pop())
return r

然后,您可以将它用于:

a = ['a1', 'a2', 'a3']
b = ['b1', 'b2']
c = ['c1', 'c2', 'c3', 'c4']

r = mix([a, b, c])

结果将是:

['c4', 'c3', 'b2', 'a3', 'b1', 'c2', 'a2', 'c1', 'a1']

关于python - 如何确定性地交错 N 个不同长度的异构列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28467172/

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