Python 一旦找到值,就使用exit列出理解
我现在正在学习列表理解,希望用优雅的列表理解替换冗长的if语句。下面的if语句是我想转换为它下面的理解列表的内容。理解列表还没有完成我想做的事情,但至少你可以看到我在努力完成它 希望列表理解仅返回一个值,就像if语句将返回的值一样 先谢谢你Python 一旦找到值,就使用exit列出理解,python,list,if-statement,list-comprehension,Python,List,If Statement,List Comprehension,我现在正在学习列表理解,希望用优雅的列表理解替换冗长的if语句。下面的if语句是我想转换为它下面的理解列表的内容。理解列表还没有完成我想做的事情,但至少你可以看到我在努力完成它 希望列表理解仅返回一个值,就像if语句将返回的值一样 先谢谢你 weight_kg = 8 if weight_kg <= 0.25: price_weight = 2.18 elif weight_kg <= 0.5: price_weight = 2.32 elif weight_kg
weight_kg = 8
if weight_kg <= 0.25:
price_weight = 2.18
elif weight_kg <= 0.5:
price_weight = 2.32
elif weight_kg <= 1:
price_weight = 2.49
elif weight_kg <= 1.5:
price_weight = 2.65
elif weight_kg <= 2:
price_weight = 2.90
elif weight_kg <= 3:
price_weight = 4.14
elif weight_kg <= 4:
price_weight = 4.53
elif weight_kg <= 5:
price_weight = 4.62
elif weight_kg <= 6:
price_weight = 5.28
elif weight_kg <= 7:
price_weight = 5.28
elif weight_kg <= 8:
price_weight = 5.42
elif weight_kg <= 9:
price_weight = 5.42
elif weight_kg <= 10:
price_weight = 5.42
elif weight_kg <= 11:
price_weight = 5.43
else:
price_weight = 5.63
print(price_weight)
shipping_price = [{"weight": 0.25, "price" : 2.18}, {"weight": 0.5 "price" : 2.32}, {"weight": 1 "price" : 2.49}]
toy_weight = 0.6
price = [ship_price["weight"] for ship_price in shipping_price if ship_price["weight"] <= toy_weight]
print(price)
重量\u kg=8
如果weight_kg因为您只需要生成器表达式中的第一个值,所以根本不需要列表。只需使用next
拉取第一个值:
>>> shipping_price = [
... {"weight": 0.25, "price" : 2.18},
... {"weight": 0.5, "price" : 2.32},
... {"weight": 1, "price" : 2.49}
... ]
>>> toy_weight = 0.6
>>> next(sp["price"] for sp in shipping_price if sp["weight"] >= toy_weight)
2.49
我会使用元组而不是字典。如果您有很多字段并想给它们命名,那么可能是NamedTuple
s,但对于两个值,我只会使用一个简单的元组,如下所示:
>>> weights_and_prices = [(0.25, 2.18), (0.5, 2.32), (1, 2.49)]
>>> toy_weight = 0.6
>>> next(wp[1] for wp in weights_and_prices if wp[0] >= toy_weight)
2.49
根据需要展开weights\u和\u prices
元组列表(即使用原始if/elif
链中的所有剩余权重/价格值).有计算价格/重量的公式吗?
也许可以在这里找到一些想法:为玩具定义价格重量后,该值用于计算运输价格/价格层。这是一个稍后的阶段,因为现在我正试图找出如何更优雅地执行if语句/选择正确的价格层。@Jeffrey你确定第一个答案@schwobasegll链接到使用对分不能回答你的问题吗?对我来说,看起来非常棒。我想,一件重0.6磅的东西不应该定价为2.49,而不是2.18;我只是把他们的示例代码删掉了。翻转比较器使其按照您描述的方式工作。:)@Samwise这根本不能回答这个问题。OP想要消除if语句块。它们被生成器替换。OP的问题措辞混乱;代码的第二部分是他们尝试对数据子集执行此操作。我只是在扩展他们代码的这一部分,以使其达到他们的要求。无需复制和粘贴代码第一部分中的所有值即可演示此概念。:)我只是想澄清一下。我用if语句代码正确地实现了这一点,但如果可能的话,我想用更干净的代码替换它。它更多的是关于如何更好地解决问题的想法,而不是存在的价值观。