Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 一旦找到值,就使用exit列出理解_Python_List_If Statement_List Comprehension - Fatal编程技术网

Python 一旦找到值,就使用exit列出理解

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

我现在正在学习列表理解,希望用优雅的列表理解替换冗长的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 <= 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语句代码正确地实现了这一点,但如果可能的话,我想用更干净的代码替换它。它更多的是关于如何更好地解决问题的想法,而不是存在的价值观。