python迭代函数例题 python迭代求解

求解一道Python编程题斐波那契数列自第三个数开始,每个数均为之前两个数的和 。
至少有两种方法来实现它 。
最常见的利用迭代的方法,其核心思路是
fib(n) = fib(n-1)fib(n-2)
而在n2时直接,没有n-2,因此直接返回1:
def fib(num): return 1 if n2 else fib(num-1)fib(num-2)
这是一种很简单的实现 。在阶梯数不大时,它很好用 。当阶梯数很大时 , 因为二次手迭代 , 会比较慢 。因此,可以在计算中保存中间值(1至n-1的阶梯数)来减少计算量:
这种方式在计算阶梯数10000时就可以保持不错的性能 。如果需要多次计算该数列,则可以利用对象来保持这个中间值列表,下列代码中,Fibonaci实例只计算未曾计算的阶梯数,在重复调用时它更具优势:
class Fibonaci(object):
....history=[1, 1]
....def cacl(self, num):
........while len(self.history) = num:
............self.history.append(self.history[-1]self.history[-2])
........return self.history[num]
if __name__ == '__main__':
....fib = Fibonaci()
....print(fib.calc(100))
....print(fib.calc(32))
....print(fib.calc(10000))
Python用迭代(yield)和递归解决八皇后问题
国际象棋的皇后行走具有最高的灵活性,可以横、竖、斜共八个方向无限步行走 。你需要将国际象棋8个皇后放在棋盘上,条件是任何一个皇后都不能威胁其python迭代函数例题他皇后 , 即任何两个皇后都不能吃掉对方 。
分析:在棋盘的第一行尝试为第一个皇后选择一个位置,再在第二行尝试为第二个皇后选择一个位置,依次类推 。在发现无法为一个皇后选择合适的位置后 , 回溯到前一个皇后,并尝试为它选择另一个位置 。当八个皇后都放在棋盘上时即得到一种解 。
用元组(其他序列也可以)表示可能的解(或一部分),例如(1 , 3,5)表示当前共摆放了三个皇后 , 第一个皇后在1行1列 , 第二个皇后在2行3列,第三个皇后在3行5列 。

当前状态state,下一个皇后在下一行的next_x位置,根据皇后的行走规则,如果已有的皇后可以吃掉下一个皇后,则表示有冲突,否则没有 。
函数conflict定义:接受用状态元组表示的既有皇后的位置,并确定下一个皇后的位置是否会导致冲突 。
参数next_x表示下一个皇后的水平位置(x 坐标,即列),而next_y为下一个皇后的垂直位置(y 坐标,即行) 。这个函数对既有的每个皇后执行简单的检查:如果下一个皇后与当前皇后的 x 坐标相同或在同一条对角线上 , 将发生冲突 , 因此返回True python迭代函数例题;如果没有发生冲突,就返回False。
abs(state[i] - next_x) in (0, next_y - i)表示两个皇后的水平距离为0或等于垂直距离时为真、否则为假 。

Python中的“迭代”详解 迭代器模式:一种惰性获取数据项python迭代函数例题的方式python迭代函数例题,即按需一次获取一个数据项 。
所有序列都是可以迭代python迭代函数例题的 。我们接下来要实现一个 Sentence(句子)类python迭代函数例题,我们向这个类的构造方法传入包含一些文本的字符串,然后可以逐个单词迭代 。
接下来测试 Sentence 实例能否迭代
序列可以迭代的原因:
iter()
解释器需要迭代对象 x 时,会自动调用iter(x) 。
内置的 iter 函数有以下作用:
由于序列都实现了 __getitem__ 方法,所以都可以迭代 。
可迭代对象:使用内置函数 iter() 可以获取迭代器的对象 。
与迭代器的关系:Python 从可迭代对象中获取迭代器 。
下面用for循环迭代一个字符串,这里字符串 'abc' 是可迭代的对象,用 for 循环迭代时是有生成器,只是 Python 隐藏了 。
如果没有 for 语句,使用 while 循环模拟,要写成下面这样:
Python 内部会处理 for 循环和其他迭代上下文(如列表推导,元组拆包等等)中的 StopIteration 异常 。
标准的迭代器接口有两个方法:
__next__ :返回下一个可用的元素,如果没有元素了,抛出 StopIteration 异常 。
__iter__ :返回 self,以便在需要使用可迭代对象的地方使用迭代器,如 for 循环中 。
迭代器:实现了无参数的 __next__ 方法,返回序列中的下一个元素;如果没有元素了,那么抛出 StopIteration 异常 。Python 中的迭代器还实现了 __iter__ 方法 , 因此迭代器也可以迭代 。
接下来使用迭代器模式实现 Sentence 类:
注意,不要 在 Sentence 类中实现__next__方法,让 Sentence 实例既是可迭代对象,也是自身的迭代器 。
为了“支持多种遍历”,必须能从同一个可迭代的实例中获取多个独立的迭代器,而且各个迭代器要能维护自身的内部状态,因此这一模式正确的实现方式是,每次调用 iter(my_iterable) 都新建一个独立的迭代器 。
所以总结下来就是:
实现相同功能,但却符合 Python 习惯的方式是 , 用生成器函数代替 SentenceIteror 类 。
只要 Python 函数的定义体中有 yield 关键字,该函数就是生成器函数 。调用生成器函数,就会返回一个生成器对象 。
生成器函数会创建一个生成器对象,包装生成器函数的定义体,把生成器传给 next(...) 函数时 , 生成器函数会向前,执行函数定义体中的下一个 yield 语句,返回产出的值,并在函数定义体的当前位置暂停 , 。最终,函数的定义体返回时,外层的生成器对象会抛出 StopIteration 异常,这一点与迭代器协议一致 。
如今这一版 Sentence 类相较之前简短多了,但是还不够慵懒 。惰性 ,是如今人们认为最好的特质 。惰性实现是指尽可能延后生成值,这样做能节省内存,或许还能避免做无用的处理 。
目前实现的几版 Sentence 类都不具有惰性,因为__init__ 方法急迫的构建好了文本中的单词列表 , 然后将其绑定到 self.words 属性上 。这样就得处理整个文本,列表使用的内存量可能与文本本身一样多(或许更多 , 取决于文本中有多少非单词字符) 。
re.finditer函数是re.findall 函数的惰性版本,返回的是一个生成器,按需生成 re.MatchObject 实例 。我们可以使用这个函数来让 Sentence 类变得懒惰,即只在需要时才生成下一个单词 。
标准库提供了很多生成器函数 , 有用于逐行迭代纯文本文件的对象 , 还有出色的 os.walk 函数等等 。本节专注于通用的函数:参数为任意的可迭代对象 , 返回值是生成器 , 用于生成选中的、计算出的和重新排列的元素 。
第一组是用于 过滤 的生成器函数:从输入的可迭代对象中产出元素的子集,而且不修改元素本身 。这种函数大多数都接受一个断言参数(predicate),这个参数是个 布尔函数,有一个参数,会应用到输入中的每个元素上,用于判断元素是否包含在输出中 。
以下为这些函数的演示:
第二组是用于映射的生成器函数:在输入的单个/多个可迭代对象中的各个元素上做计算,然后返回结果 。
以下为这些函数的用法:
第三组是用于合并的生成器函数 , 这些函数都可以从输入的多个可迭代对象中产出元素 。
以下为演示:
第四组是从一个元素中产出多个值,扩展输入的可迭代对象 。
以下为演示:
第五组生成器函数用于产出输入的可迭代对象中的全部元素,不过会以某种方式重新排列 。
下面的函数都接受一个可迭代的对象,然后返回单个结果,这种函数叫“归约函数”,“合拢函数”或“累加函数” , 其实,这些内置函数都可以用 functools.reduce 函数实现,但内置更加方便 , 而且还有一些优点 。
参考教程:
《流畅的python》 P330 - 363
Python3 - 排列组合的迭代 遍历一个序列中元素的所有可能的排列或组合 。
itertools模块提供了三个函数来解决这类问题 。其中一个是itertools.permutations() , 它接受一个序列并产生一个元组序列,每个元组由序列中所有元素的一个可能排列组成,即通过打乱序列中元素排列顺序生成一个元组,比如python迭代函数例题:
如果想得到指定长度的所有排列,你可以传递一个可选的长度参数 。比如:
使用itertools.combinations()可得到输入序列中元素的所有的组合 。比如:
对于combinations()来讲 , 元素的顺序已经不重要了,即组合 ('a', 'b') 与 ('b', 'a') 其实是一样的,最终只会输出其中一个 。
在计算组合的时候,一旦元素被选取就会从候选中剔除掉(比如如果元素’a’已经被选取了,那么接下来就不会再考虑它了) 。而函数itertools.combinations_with_replacement()允许同一个元素被选择多次,比如:
尽管手动可以实现排列组合算法 , 但是这样做比较麻烦,当遇到有些复杂的迭代问题时,可以先去看看itertools模块是否能实现,很有可能会在里面找到解决方案python迭代函数例题!
【python迭代函数例题 python迭代求解】python迭代函数例题的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于python迭代求解、python迭代函数例题的信息别忘了在本站进行查找喔 。

    推荐阅读