如何在Python列表推导式中访问前两个元素生成斐波那契数列?
问题:用列表推导式生成依赖前两项的序列(如斐波那契数列)
假设存在一个每个元素依赖前两个元素的列表,例如斐波那契数列:
fibonacci = [0,1,1,2,3,5,8,13,21]
希望通过列表推导式创建此类列表,写法框架如下:
fibonacci = [0,1] + [previous_element+element_before_previous_element for _ in range(7)]
(此处的7是除初始两个元素外,列表所需的长度,为任意值。)
请问如何访问previous_element和element_before_previous_element,并以0和1作为初始值?
注:已知用for循环实现很简单,但需要用一行代码完成。
解决方案
普通列表推导式无法直接访问正在构建的列表中的前序元素,你可以利用Python的**赋值表达式(:=)**来维护前两个元素的状态,实现一行生成目标序列:
fibonacci = [0, 1] + [(a := b, b := a + b)[1] for _ in range(7)]
原理说明:
- 初始状态下
a=0、b=1,对应序列的前两个元素 - 每次循环中,先将
a更新为当前的b,再将b更新为更新前的a与更新前的b之和,最后取元组的第二个元素(即新生成的b)加入列表 - 循环指定次数后,生成的新元素会和初始的
[0,1]拼接,得到完整的目标序列
内容的提问来源于stack exchange,提问作者M1n3c4rt
相关产品推荐
相关产品推荐

