如果每三个项目重复元素,则列出列表

时间:2019-09-24 14:43:03

标签: python for-loop list-comprehension

此网站上的列表理解问题太多,但似乎没有一个与我想要的相符。我已经使用for循环完成了此操作,但是我想知道是否可以通过列表理解来完成,或者有人可以将我定向到可以找到类似情况的地方。

我有一个功能列表:

error[E0277]: the trait bound `&str: std::convert::From<&Foo>` is not satisfied
  --> src/bin/into.rs:34:33
   |
34 |     let result: &str = (&Foo()).into();
   |                                 ^^^^ the trait `std::convert::From<&Foo>` is not implemented for `&str`
   |
   = note: required because of the requirements on the impl of `std::convert::Into<&str>` for `&Foo`

每个功能都是我问我的学生的一个问题,已导出为PDF文件。列表上的最后一个功能是 footer ,该功能使PDF文件插入页面跳至下一页。

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

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

生成

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

其中 call_functions 基本上是PDF导出器。因此,我的列表理解功能添加了三个问题,然后跳至下一页,又添加了三个问题。随着问题数量的增加,代码最终看起来像是一团糟:

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

生成

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

尽管这行得通,但我正在尝试制作一个理解列表,该列表将遍历列表,每隔三个元素之后,它将在列表中插入最后一个元素。甚至将 footer 保留在列表之外也是可行的。但是我无法正常工作。

我尝试过:

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

到SyntaxError。

也尝试过:

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

也出现SyntaxError

请问有人可以告诉我(或指示我去做错),和/或直接处理类似的案件吗?

谢谢

2 个答案:

答案 0 :(得分:2)

[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']

答案 1 :(得分:0)

没关系,我想我可以使用它。

对我有用的是:

call_functions([x if (i+1)%4!=0 else function_list[-1] for i,x in enumerate(function_list)])

如果我愿意

if i%4!=0 #making the fourth element function footer

我得到一个以 footer 函数开头的列表。但要这样做:

if (i+1)%4!=0

我避免了最初的问题。我得到:

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

我敢肯定,还有其他方法可以使这一过程变得更简单,更整洁,欢迎提出任何建议。

谢谢!

例如。