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

有人可以解释以下转换为单行代码的循环代码吗?


代码:


total_price = 0

for cost in gift_costs:

    if cost < 25:

        total_price += cost * 1.08

转换后的一行代码:


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


慕尼黑的夜晚无繁华
浏览 137回答 3
3回答

慕斯709654

您没有明确说明,但很明显您使用的是 numpy 数组。所以让我们打破这一行,以一些任意数组为例:>>> gift_costs = numpy.array([10, 22, 35, 41])>>> total_price = (gift_costs[gift_costs < 25]).sum() * 1.08>>> total_price34.56total_price = : 表达式右侧的内容将被分配给total_price变量。gift_costs < 25:每当您将比较运算符(例如<)与 numpy 数组一起使用时,将为数组的每个项目评估该条件语句。然后,您将获得一个充满布尔值的新数组,True如果给定值与条件匹配,则布尔值将是,False否则。因此,对于上面的示例,您将得到以下内容:array([True, True, False, False])gift_costs[gift_costs < 25]: 考虑到我们刚才提到的内容,我们现在要求gift_costs返回其值,其位置在以下序列中是True:&nbsp;[True, &nbsp;True, False, False]。这些元素是:10 和 22,返回的对象是:array([10, 22]).sum():Numpy 数组对象有一个名为 的方法sum(),它返回数组的总和(∑)。在我们的示例中,这是 10 + 22 = 32。* 1.08: 最后将sum()方法(32)返回的值乘以1.08,等于34.56免责声明:请原谅我的英语,我尽力让自己清楚。

芜湖不芜

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

慕姐8265434

我们也可以在没有 numpy 的情况下编写一行代码。请检查这个。l&nbsp;=&nbsp;[10,&nbsp;22,&nbsp;35,&nbsp;41] t&nbsp;=&nbsp;sum((x&nbsp;for&nbsp;x&nbsp;in&nbsp;l&nbsp;if&nbsp;x&nbsp;<25))*1.08我使用了 sum 函数并为函数的参数创建了一个生成器。发电机的方程很简单。只需阅读以下内容。“如果 x 小于 25,则在列表 l 中取一个 x”生成器收集条件中的所有 x,然后转移到求和函数...看起来很简单是不是???
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python