让我们假设我已经定义了函数:
def threeArgs(x,y,z):
return ... # Returns True or False
我还有一个元素列表:
a = [elem1, elem2, ..., elemN]
我想构建另一个列表b,其中包含第一个和最后一个元素形式列表a以及其间的三个元素Xn(Xn-1,Xn,Xn + 1)返回true。
如何以优雅的pythonic方式做到这一点?
2 个答案:
答案 0 :(得分:1)
使用切片创建三个移位列表,然后将zip
组合在一起:
[a[0]] + [y for x, y, z in zip(a, a[1:], a[2:]) if threeArgs(x, y, z)] + [a[-1]]
答案 1 :(得分:0)
如果您定义了window功能,则可以执行以下操作:
a[0] + [a[i+3] for i,v in enumerate(imap(threeArgs, window(a, 3))) if v] + a[-1]
可能会为较大的列表使用较少的内存,因为它完全是迭代器。