Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Pythonic一行填充序列_Python - Fatal编程技术网

Pythonic一行填充序列

Pythonic一行填充序列,python,Python,假设我要计算前n个斐波那契数,并将它们放入一个列表中。对于“for”循环,这是微不足道的。但是,有没有一条线——也许是一种列表理解的魔法——可以更优雅地实现这一点 我以前问过这个问题,但它被关闭了,前提是它已经得到了回答。但这两个建议的答案实际上都不是这个问题的答案!它们的形式如下: fib=lambda n:reduce(lambda x,n:[x[1],x[0]+x[1]],范围(n),[0,1])[0] 这将产生序列的第n个成员。我正在寻找一个Pythonic单线表达式,它输出一个完整的序

假设我要计算前n个斐波那契数,并将它们放入一个列表中。对于“for”循环,这是微不足道的。但是,有没有一条线——也许是一种列表理解的魔法——可以更优雅地实现这一点

我以前问过这个问题,但它被关闭了,前提是它已经得到了回答。但这两个建议的答案实际上都不是这个问题的答案!它们的形式如下:

fib=lambda n:reduce(lambda x,n:[x[1],x[0]+x[1]],范围(n),[0,1])[0]

这将产生序列的第n个成员。我正在寻找一个Pythonic单线表达式,它输出一个完整的序列,即不是'3',而是
[1,1,2,3,5,…]

我想重申,这不是我需要解决的问题。一个简单的“for”循环可以很好地完成这项工作。我想知道的是,在一行中是否有这样做的首选方式。这不是一个“代码高尔夫”的问题——这不是出于好奇——而是在工具包中添加一个新工具,加深我对Pythonic习语的理解


谢谢

您只需使用已找到的一条线性线即可获得任意元素:

fib=lambda n:reduce(lambda x,[x[1],x[0]+x[1]],range(n),[0,1])[0] >>>纤维蛋白原(6) 8. 并用它来填写一个列表:

>>[对于范围(10)中的n,减少(λx,[x[1],x[0]+x[1]],范围(n),[0,1])[0]
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34]

这将计算第一个
n
斐波那契数

n = 10
fibs = reduce(lambda x, _: x + [x[-2] + x[-1]], [0] * (n - 2), [0, 1])

你指的是
a=1,0;打印([(a:=[sum(a),a[0]]][1]表示范围内的n(100)])
?我的2美分:只是不要仅仅为了它而被一行程序所追赶…@Julien每个工具都有它的时间和地点,你不这么认为吗?一个典型的例子就是为了一行代码而尽可能地降低代码的效率…@Julien是的,我不会用这样的东西,但嘿,这是他们要求的。检查一下公认的答案,找到更好的方法!我同意单行程序很少是正确的方法,但是如果你认为它们永远不会提高代码的可读性。。。好吧,我要吃我的帽子:)@RohanSByrne好吧,在这种情况下,我认为一行代码真的降低了可读性。我在发布我的答案后花了大约5分钟的时间才理解它的作用。当然,但可读性是一个上下文和折衷的游戏。我无法向您展示我正在处理的案例,但我可以向您保证,通过将脚本的一个子部分压缩到一个表达式中,整个脚本的可读性得到了极大提高,即使该表达式本身有点巴洛克风格。这就是我要找的-谢谢!我知道我在什么地方见过它,但我却不知道该怎么说。