python - 如何通过理解实现从这个循环到列表的计数器?
问题描述
我该如何编写这段代码
def Serie_a(n):
Serie_a = []
m=0
for i in [1..n]:
m = m + 1/i
Serie_a.append(m)
print Serie_a
以理解列表的形式?
解决方案
目前,您无法编写像for
循环一样易于阅读的列表理解。相反,使用itertools.accumulate
.
>>> list(accumulate(range(1,11), lambda acc, x: acc + 1/x))
[1, 1.5, 1.8333333333333333, 2.083333333333333, 2.283333333333333, 2.4499999999999997, 2.5928571428571425, 2.7178571428571425, 2.8289682539682537, 2.9289682539682538]
在 Python 3.8 中,赋值表达式将允许您编写
% ./python.exe
Python 3.8.0a2 (tags/v3.8.0a2:23f4589b4b, Mar 18 2019, 15:16:44)
[Clang 10.0.0 (clang-1000.11.45.5)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> m = 0
>>> [m := m + 1/x for x in range(1,11)]
[1.0, 1.5, 1.8333333333333333, 2.083333333333333, 2.283333333333333, 2.4499999999999997, 2.5928571428571425, 2.7178571428571425, 2.8289682539682537, 2.9289682539682538]
请注意,m
需要先对其进行初始化,然后才能在列表推导中使用它。
推荐阅读
- python - 将 python dict 转换为列表列表
- c++ - 如何提高我的算法的时间复杂度以生成漂亮的排列?
- django - 如何在 Django 中使用 API 发布 Pandas DataFrame
- javascript - Vue.js 中的空白白页,输入为 null
- javascript - 如何自定义颜色tailwind css上的直通文本装饰
- python - 如何阅读直到某个字符串并在 Python 中重复?
- android - 如何在显示加载动画时隐藏图像按钮中的 src
- python - 使用 SQLite 根据列值复制行
- php - Laravel Passport - tokensExpireIn、refreshTokensExpireIn 和 personalAccessTokensExpireIn 有什么区别
- mysql - 如何使用循环在mysql中插入每个月最后一天的数据?