Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.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
Python 使用;对于不在y中的x“;_Python_For Loop - Fatal编程技术网

Python 使用;对于不在y中的x“;

Python 使用;对于不在y中的x“;,python,for-loop,Python,For Loop,我想做一个动态函数,它执行斐波那契序列。它从一个哈希表开始,该哈希表为位置赋值,然后返回。但如果该位置不在哈希表中,则代码会将该值与该位置一起存储在哈希表中。代码如下: def dyn_fib(n): memo = {1:0, 2:1} if n <= 2: return memo[n] else: for n not in memo: memo[n] = memo[n-2] + memo[n-1

我想做一个动态函数,它执行斐波那契序列。它从一个哈希表开始,该哈希表为位置赋值,然后返回。但如果该位置不在哈希表中,则代码会将该值与该位置一起存储在哈希表中。代码如下:

 def dyn_fib(n):
     memo = {1:0, 2:1}
     if n <= 2:
         return memo[n]
     else:
         for n not in memo:
             memo[n] = memo[n-2] + memo[n-1]
     return memo[n]
对于备忘录中尚未列出的任何位置“n”,然后循环该位置,直到到达“n”。我想我可以用

 for n not in memo:

但是Geany说有一个语法错误。我认为这是因为如果n=5,它需要在5之前计算3和4,但我不确定如何将“对于备忘录中尚未出现的任何位置n”放入python语句中。有人知道怎么做吗?(我觉得这很简单,但我对Python还不是很精通。)

你一般不能说x的
不在y中,因为有无限多的对象不在y中

对于您的具体情况,我认为类似的方法可能会奏效:

[x for x in range(0, n) if x not in y]

通常不能说x不在y中,因为有无限多的对象不在y中

对于您的具体情况,我认为类似的方法可能会奏效:

[x for x in range(0, n) if x not in y]

语法中没有for not的
<此处
中的code>不是包含运算符,在此处使用
not
没有任何意义。
memo
中没有无限多的整数,Python不可能迭代所有这些整数。这忽略了其他键类型(字典可以包含任意数量的键类型)。好吧,除非你定义一个超集,“not in memo”是一个无限数量的数字,所以这没有真正的意义。还值得注意的是,你的代码完全被破坏了-因为
memo
在函数中,每次你调用它,它都会被重建。同样,这也是为什么要使用装饰器,它使备忘录不在功能范围内。我现在学到了很多,谢谢大家!你可能想了解,这是正确的做法。正如@jornsharpe所提到的,有一种更好的方法。在语法中没有
for not<此处
中的code>不是包含运算符,在此处使用
not
没有任何意义。
memo
中没有无限多的整数,Python不可能迭代所有这些整数。这忽略了其他键类型(字典可以包含任意数量的键类型)。好吧,除非你定义一个超集,“not in memo”是一个无限数量的数字,所以这没有真正的意义。还值得注意的是,你的代码完全被破坏了-因为
memo
在函数中,每次你调用它,它都会被重建。同样,这也是为什么要使用装饰器,它使备忘录不在功能范围内。我现在学到了很多,谢谢大家!你可能想了解,这是正确的做法。正如@jornsharpe所提到的,有一个更好的方法。