为了账号安全,请及时绑定邮箱和手机立即绑定

For循环代码到python中的一行代码?

For循环代码到python中的一行代码?

慕尼黑的夜晚无繁华 2023-02-07 10:43:50
有人可以解释以下转换为单行代码的循环代码吗?代码:total_price = 0for cost in gift_costs:    if cost < 25:        total_price += cost * 1.08转换后的一行代码:total_price = (gift_costs[gift_costs < 25]).sum() * 1.08
查看完整描述

3 回答

?
慕斯709654

TA贡献1840条经验 获得超5个赞

您没有明确说明,但很明显您使用的是 numpy 数组。所以让我们打破这一行,以一些任意数组为例:


>>> gift_costs = numpy.array([10, 22, 35, 41])

>>> total_price = (gift_costs[gift_costs < 25]).sum() * 1.08

>>> total_price

34.56

  1. total_price = : 表达式右侧的内容将被分配给total_price变量。

  2. gift_costs < 25:每当您将比较运算符(例如<)与 numpy 数组一起使用时,将为数组的每个项目评估该条件语句。然后,您将获得一个充满布尔值的新数组,True如果给定值与条件匹配,则布尔值将是,False否则。因此,对于上面的示例,您将得到以下内容:array([True, True, False, False])

  3. gift_costs[gift_costs < 25]: 考虑到我们刚才提到的内容,我们现在要求gift_costs返回其值,其位置在以下序列中是True[True,  True, False, False]。这些元素是:10 和 22,返回的对象是:array([10, 22])

  4. .sum():Numpy 数组对象有一个名为 的方法sum(),它返回数组的总和(∑)。在我们的示例中,这是 10 + 22 = 32。

  5. * 1.08: 最后将sum()方法(32)返回的值乘以1.08,等于34.56


免责声明:请原谅我的英语,我尽力让自己清楚。


查看完整回答
反对 回复 2023-02-07
?
芜湖不芜

TA贡献1796条经验 获得超7个赞

基本上是一样的。for 循环使用 if 子句来确定成本 <25,然后对其应用乘法 * 1.08。one 子句使用 [gift_costs < 25] 进行过滤,随后应用相同的乘法。另一种可能性(在计算时间方面也更有效)是列表理解。



查看完整回答
反对 回复 2023-02-07
?
慕姐8265434

TA贡献1813条经验 获得超2个赞

我们也可以在没有 numpy 的情况下编写一行代码。请检查这个。

l = [10, 22, 35, 41]

t = sum((x for x in l if x <25))*1.08

我使用了 sum 函数并为函数的参数创建了一个生成器。
发电机的方程很简单。只需阅读以下内容。
“如果 x 小于 25,则在列表 l 中取一个 x”
生成器收集条件中的所有 x,然后转移到求和函数...

看起来很简单是不是???


查看完整回答
反对 回复 2023-02-07
  • 3 回答
  • 0 关注
  • 136 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信