【问题标题】:One line for loop a = a*b + x [duplicate]循环 a = a*b + x 的一行 [重复]
【发布时间】:2020-12-28 08:55:14
【问题描述】:

我有以下 for 循环:

a = 0
b = 100
for x in my_list:
  a = a * b + x
return a

我的问题是我可以单行写吗?

我试过了:

a = my_list[0]
return sum((a*b + x) for x in my_list)

但没有做我想做的事。

【问题讨论】:

  • 我想不出用一行写的方法,即使其他人能想到一种“聪明”的方法,我也非常怀疑它是否会使代码使用起来更方便。
  • “但没有做我想做的事。”你想让它做什么?
  • 如上执行结果,最后返回“a”,我刚刚编辑了它
  • my_list 完全是任意的吗?
  • 为什么要写在一行?请注意,除了for x in whatever: do_something_with(x),Python 没有单行 for 循环,但如果您询问使用理解构造,那不是您应该考虑的方式。列表推导等表达对可迭代对象的映射/过滤操作以产生一些结果、列表、字典、集合或生成器。您在这里拥有的不是映射/过滤操作,而是累积。 Pythonic 的方法是使用 for 循环。

标签: python python-3.x python-2.7 for-loop one-liner


【解决方案1】:
from functools import reduce
res = reduce(lambda a, x: a * b + x, my_list, 0)

【讨论】:

  • 你比我先到了!作为一个内心深处的函数式程序员,我总是很难过像 reduce 这样重要的工具必须在 Python 中导入。
  • 它看起来很聪明,但我不禁注意到其中一个输入 (my_list) 完全丢失了......
  • 情况并非总是如此,但他们虽然在全局命名空间中已经有太多名字了:)
  • @alani 是的错字,忘记输入可迭代 xD
  • @hl037_ 实际上,Guido 想要完全删除 mapfilterreduce。根据 Guido 的说法,map/filter 作为理解结构几乎总是更好,而reduce“通常作为循环更清晰”。基本上,Python 不是一种函数式编程语言,而是从它喜欢的函数式编程语言中挑选和选择结构,但从本质上讲,它是一种非常命令式的语言
【解决方案2】:
my_list = [1,2,3,4,5]
a = 0
b = 100
[print(a * b + x) for x in my_list]

但作为 a = 0,您将只显示您的列表

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-20
    • 2013-11-07
    • 2016-02-23
    • 1970-01-01
    • 2016-01-05
    • 2021-05-09
    • 1970-01-01
    • 2017-07-03
    相关资源
    最近更新 更多