繁体   English   中英

使用 python 生成器在项目满足条件后继续循环

[英]Continue the loop once the item meets a condition using a python generator

我有一个随机数列表。 我想细化列表,以便没有乘积为 0.5 的数字对。 我正在尝试对 python 生成器使用next方法,以便在满足条件时可以继续循环。 另一个原因是我想避免嵌套的 for 循环,以便代码在满足条件时可以继续主循环。

值得注意的是,在我的真实案例中,检查条件的计算成本非常昂贵,这就是我想使用生成器的原因,这样我就可以在满足条件时继续循环,而不是检查条件与所有当前存在的数字refined_list 这里我只是以一个简单的条件i * j == 0.5为例。

下面是我的代码

import random

rands = [random.uniform(0,1) for _ in range(100)]
refined_list = []
for i in rands:
    if refined_list: # Make sure the refined list is not empty
        if next(j for j in refined_list if i * j == 0.5):
            continue
    refined_list.append(i)

print(refined_list)

但是,一旦满足条件,我就会收到StopIteration错误。

那么我应该如何使用生成器继续循环? 或者有没有更好的方法来做到这一点?

问题是,在next它自身,无论是你的条件为真,要么是引发异常


您可以使用any

for i in rands:
    if refined_list:  # Make sure the refined list is not empty
        if any(j for j in refined_list if i * j == 0.5):
            continue
    refined_list.append(i)

您可以重构条件以对条件进行分组,然后得到

for i in rands:
    if not (refined_list and any(j for j in refined_list if i * j == 0.5)):
        refined_list.append(i)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM