Python 如何简单的在列表被改变的情况下,生成随机但固定的内容

Python 如何简单的在列表被改变的情况下,生成随机但固定的内容,第1张

Python 如何简单的在列表被改变的情况下,生成随机但固定的内容,第2张

需求是,在网站上以随机的匹配逻辑来展现相关文章区域的内容。不同页面之间需要展现不同的内容,但同一个页面上面,需要固定展示某几条匹配内容。

一开始想到的办法是通过 random.seed 实现,但发现并不够用。

import random
docs = [1,2,3]
random.seed(1) # 以当前 doc_id 为 seed
relate_docs = random.sample(docs, 2)
# [1, 3]

当 docs 本身被改变时:

docs = [1,2,3,4]
random.seed(1) # 以当前 doc_id 为 seed
relate_docs = random.sample(docs, 2)
# [2, 3]

我知道这样的结果是合理的,但仍希望找到一种简单的方式,使得在列表变化的时候,输出仍然会是前面的[1,3]

感觉上应该没有特别简单的实现方法,但毕竟目前的解决方案着实不理想。

目前采取的凑合办法,是每一个 doc 的数据库条目里面去写死它需要展现的随机 n 条内容,这实在是太不优雅。现在情况下,初始数据入库、增量数据更新和页面展现几块的代码都得有这个处理流程,给维护也添加了些许麻烦。

我不是专业做技术的,所以问题可能比较小白。尝试搜索无果(这个问题也不容易被几个词来描述),因此提问求教,感谢诸位。

----------------------- 以下是精选回复-----------------------

答:随机但固定 -> 列表改变仍然展示之前的内容 -> 新增内容永远不被展示 -> 没必要新增内容
答:不知道是不是我理解错了,你的需求是
[1] -> [1]
[1, 2] -> [1, 2]
[1, 2, 3] -> [1, 2, 3]
[1, 2, 3, 4] -> [1, 2, 3, 4]

答:你看样子需要的是 输入的种子是一样的 那么输出的序列是固定的 这样的逻辑?因为你随机的范围是可变的,例如开始是 3 后面变成 4,我感觉没有历史记录的话,似乎不能实现有时候随机,有时候固定的需求。至少需要知道本次 sample 有几个是需要新随机的。
答:是学校摇号程序?
答:我觉得, 你先把原数据 random, 再把 docs.append() 新增数据不就行了,按你的意思,你新增的数据也随机 不到啊?
如果 随机数据也增加,可根据具体情况 递归、循环 remove,random 。 我就提个想法昂。
答:也不知道是不是你的需求
import random
docs = [i for i in range(48)]
random.seed(1) # 以当前 doc_id 为 seed
n1 = 10
n2 = 2
doc2 = [docs[i:i+n1] for i in range(0,len(docs),n1) if len(docs[i:i+n1])==n1]

relate_docs = sum([random.sample(i,n2) for i in doc2],[])
print(relate_docs)

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » Python 如何简单的在列表被改变的情况下,生成随机但固定的内容

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情