首页 > 解决方案 > 列出理解 if else 每三个项目重复元素

问题描述

这个网站上有太多关于列表理解的问题,但似乎没有一个符合我想做的事情。我已经用 for 循环完成了它,但我想知道它是否可以用列表推导来完成,或者是否有人可以指导我在哪里可以找到类似的案例。

我有一个功能列表:

function_list=[iron,cobalt,nickel,copper,zinc,vanadium,chromium,managenese,titanium,footer]

每个函数都是我向学生提出的问题,导出为 PDF 文件。列表中的最后一个功能是页脚,它使 PDF 文件插入一页跳到下一页。

所以通常,一个简单的测验是什么样的(到目前为止)?

call_functions([x for x in function_list[0:3]] + [function_list[-1]])

生成

call_functions([iron,cobalt,nickel,footer]) #as desired

其中call_functions基本上是一个 PDF 导出器。所以我的列表理解添加了三个问题并跳到下一页,又添加了三个问题。随着问题数量的增加,代码最终看起来一团糟:

call_functions([x for x in function_list[0:3]] + [function_list[-1]] + [x for x in function_list[3:6]]+ [function_list[-1]] + [x for x in function_list[6:9]])

生成

call_functions([iron,cobalt,nickel,footer,copper,zinc,vanadium,footer,chromium,managenese,titanium]) #as desired

虽然这可行,但我正在尝试创建一个单一的理解列表,它将遍历列表,并且在每三个元素之后,它将插入列表中的最后一个元素。甚至将页脚保留在列表之外也是可行的。但我无法让它工作。

我试过了:

[x for i,x in enumerate(function_list[0:9]) if i%3==0 function_list[-1] else x]

到语法错误。

也试过:

[x if i%3==0 function_list[-1] else x for i,x in enumerate(function_list[0:9])]

还有语法错误

有人可以告诉我(或指导我)我做错了什么,和/或指导类似的情况吗?

谢谢

标签: pythonfor-looplist-comprehension

解决方案


[func for i in range(0, len(function_list) - 1, 3) for func in function_list[i:i+3] + [function_list[-1]]]

输出:

>>>

['iron',
 'cobalt',
 'nickel',
 'footer',
 'copper',
 'zinc',
 'vanadium',
 'footer',
 'chromium',
 'managenese',
 'titanium',
 'footer']

推荐阅读