-1

我现在正在学习列表推导,并想用优雅的列表推导替换冗长的 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)
4

1 回答 1

0

由于您只需要生成器表达式中的第一个值,因此您根本不需要列表。只需使用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_and_prices元组列表(即使用原始if/elif链中所有剩余的重量/价格值)。

于 2020-10-23T15:46:50.733 回答