如何解决我如何以循环方式组合两个数组,以便出现一个列表的3个项目,然后出现另一个列表的1个项目,使用pythondjango
我正在建立一个包含事件和帖子的社交媒体网站,我希望用户feed每4个帖子发布一次新的事件。因此,基本上,提要将如下所示:
帖子1,帖子2,帖子3,事件1,帖子4,帖子5,帖子6,事件2 ......
我是否在模板或视图中执行此操作?而我该怎么办呢?
解决方法
您认为可以执行以下操作:
def every_nth(iter1,iter2,n):
count = 1
while True:
if count % n == 0:
element_iter_2 = next(iter2,None)
if element_iter_2: yield element_iter_2
else:
element_iter_1 = next(iter1,None)
if element_iter_1: yield element_iter_1
count += 1
if not (element_iter_1 or element_iter_2):
return
posts = ['p1','p2','p3','p4','p5','p6'] # Assuming you have iterables that contain posts
events = ['e1','e2','e3','e4'] # ... and events
iter_posts = iter(posts)
iter_events = iter(events)
combine = list(every_nth(iter_posts,iter_events,4))
# combine = ['p1','e1','p6','e2']
,
Yves Hary的基本思路,但要保证将显示所有项目:
from itertools import chain,zip_longest
# From python itertools cookbook: https://docs.python.org/3/library/itertools.html
def grouper(iterable,n,fillvalue=None):
"Collect data into fixed-length chunks or blocks"
# grouper('ABCDEFG',3,'x') --> ABC DEF Gxx"
args = [iter(iterable)] * n
return zip_longest(*args,fillvalue=fillvalue)
events = ['e1','e4']
posts = ['p1','p6']
combined = [
*chain(
*chain(
*zip_longest(
grouper(posts,3),grouper(events,1),fillvalue=[],)
)
)
]
combined = ['p1','e4']
如果要在模板中执行此操作,可以使用for计数器并在模板中添加过滤器。 This帖子应该有帮助
另一种方法是在视图函数中执行。那里的代码类似于模板所需的代码。只需遍历帖子,然后检查索引是否精确地除以四,如果是,则将事件推送到列表中。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。