gpt4 book ai didi

python - 双 for 循环到 Python 列表理解

转载 作者:太空宇宙 更新时间:2023-11-04 10:27:02 25 4
gpt4 key购买 nike

我有以下(简化结构):

class Wafer:
def __init__(self, df):
self.dose_fields = df

class Data:
def __init__(self, add_zero):
self.wafers = []
self.wafers.append(Wafer([1.0, 1.5]))
self.wafers.append(Wafer([2.0, 2.0]))
self.wafers.append(Wafer([3.0, 3.5]))
self.wafers.append(Wafer([4.0, 4.5]))

if add_zero:
self.wafers.append(Wafer([5.0, 0.0]))

我想要一个当 dose_fields 值之一为零时返回 False 的函数。

像这样:

data = Data(True)        
res = True
for wafer in data.wafers:
for fld in wafer.dose_fields:
if fld == 0.0:
res = False
print res

data = Data(False)
res = True
for wafer in data.wafers:
for fld in wafer.dose_fields:
if fld == 0.0:
res = False
print res

这将打印 False resp。真实(我想要的)。

但是,当我尝试使用列表理解时:

data = Data(True)
print [df for df in wafer.dose_fields for wafer in data.wafers]
print res

data = Data(False)
print [df for df in wafer.dose_fields for wafer in data.wafers]
print res

我得到了结果

[4.0, 4.0, 4.0, 4.0, 4.0, 4.5, 4.5, 4.5, 4.5, 4.5]
True

响应

[5.0, 5.0, 5.0, 5.0, 5.0, 0.0, 0.0, 0.0, 0.0, 0.0]
True

不知何故,我得到了最后一项的重复,而我想要完整的列表,然后检查里面是否有 0.0。

我应该怎么做才能“修复”列表理解语句?

最佳答案

如果您真的想要测试 0.0 是否存在,您应该使用 in 运算符。它不仅更具可读性,而且速度更快。然后你也可以使用 any

代替:

res = True
for wafer in data.wafers:
for fld in wafer.dose_fields:
if fld == 0.0:
res = False

res= not any([0.0 in wafer.dose_fields for wafer in data.wafers])

关于python - 双 for 循环到 Python 列表理解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28808626/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com