假设一个生成器一一生成下面的元组(从左到右)

(1, 2, 3), (2, 5, 6), (3, 7, 10), (4, 5, 11), (3, 5, 15), (4, 5, 9), (4, 6, 12)
...

并假设只要谓词为真,我就想进行迭代。将该谓词设为 sum(yielded_value) < 20 。然后迭代器将停止 (3, 5, 15) 。我可以这样做,说:
list(itertools.takewhile(lambda x: sum(x) < 20, some_generator()))

问题,我如何用两个谓词写一个类似的表达式?假设我想要:
list(itertools.takewhile(lambda x: sum(x) < 20 and first_value_of_tuple > 3, some_generator()))

(在这种情况下,由 (4, 6, 12) 停止。)

最佳答案

您可以使用索引访问每个元组的元素。

list(itertools.takewhile(lambda x: sum(x) < 20 and x[0] > 3, some_generator()))

关于Python itertools—takewhile() : multiple predicates,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34187448/

10-15 08:48