6.3 迭代 递归

迭代器

count = 0while True:    if count ==101:        break    print(count)    count += 1    

python中一切皆对象

height = 180salary = 3.2name = ‘nick‘hobby_list1 = [‘run‘,‘read‘]hobby_tup = (‘run‘,‘read‘)info_dict1 = {‘name‘:‘nick‘,‘weight‘:140}hobby_set = {‘read‘,‘run‘,‘run‘}?def func():    pass?# w和a模式都会自动生成文件f = open(‘test.txt‘,‘w‘,encoding=‘utf8‘)

可迭代对象:只要拥有iter方法的对象就是可迭代对象

height.__iter__salary.__iter__func.__iter__name.__iter__()hobby_list.__iter__()hobby_set.__iter__()hobby_tup.__iter__()info_dict.__iter__()f.__iter__()

字符串、列表、元祖、字典、集合、文件都是可迭代对象

hobby_list = [‘run‘,‘read‘]hobby_list_iter = hobby_list.__iter__()  # 把列表变成可迭代对象# print(hobby_list_iter.__next__())# print(hobby_list_iter.__next__())# print(hobby_list_iter.__next__())?# for k in info_dict:#     print(k)info_dict = {‘name‘:‘nick‘,‘weight‘:140}info_dict_iter = info_dict.__iter__()# print(info_dict_iter.__next__())# print(info_dict_iter.__next__())# print(info_dict_iter.__next__())

next其实是在遍历和迭代对象的元素,一旦遍历完报错

迭代器对象:拥有 iter _ 方法,可迭代对象拥有next_方法的才是迭代器对象,文件本身就是迭代器对象

hobby_list2 = [‘run‘,‘read‘]# count = 0# while True:#     print(hobby_list2[count])##     count += 1##     if count == len(hobby_list2):#         break?# for循环不依赖索引取值?# 这一段代码如果用c写,就是for循环的原理hobby_list2 = [‘run‘,‘read‘]hobby_list2_iter = hobby_list2.__iter__()while True:    try:        print(hobby_list2_iter.__next__())    except:        break?for i in hobby_list2:  # hobby_list2,把hobby_list2转化为可迭代对象    print(i)???print(hobby_list2) # 一筐鸡蛋print(hobby_list2.__iter__()) # 相比较列表,它节省内存空间,老母鸡?print(hobby_list2_iter)print(hobby_list2_iter.__iter__().__iter__().__iter__())  # 迭代器对象使用iter方法后是迭代器对象本身

可迭代对象:拥有iter方法的对象就是可迭代对象,推到:可迭代对象不一定是迭代器对象

迭代器对象:拥有iter方法的和next方法的就是迭代器对象,推导:迭代器对象一定是可迭代对象

文件即可迭代对象,又是迭代器对象

三元表达式(三目表达式)

dog_name = ‘xiaogou‘?if dog_name ==‘fenggou‘:    print(‘远离他‘)else:    print(‘盘他‘)    #不推荐使用print(‘远离他‘) if dog_name ==‘fenggou‘ else print(‘盘他‘)?# 列表推导式# lis = []## for i in range(100):#     lis.append(i)## print(lis)?# lis = [i*2 for i in range(100)]# print(lis)# 千万不要写这样的东西,否则真的会被骂傻逼lis1 = [i * 2 if i > 50 else i for i in range(100)]print(lis1)

字典生产式

?lis = [i for i in range(10)]print(lis)?dic2= dict.fromkeys([1,2,3,4],2)print(dic2)dic = {i:i**2 for i in range(10)}for i in dic.items():    print(i)?拉链函数res = zip(‘abcd‘,[1,2,3,4])dic = dict()for k,v in res:    dic[k] = v?print(dic)?print({k:v for k,v in zip(‘abcd‘,[1,2,3,4])})??

递归

def f2():    print(‘from f2‘)    # 递归: 函数掉函数自己,类似于循环,但是这个循环必须有结束条件import timedef f1(x): # x=0    print(x) # 0 1    # time.sleep(1)    x += 1 # 1 2    if x ==101:        return    f1(x) # x=1        def f2():    f1()f1(0)?def guess_age(age,count):    age -= 2    count -= 1    if count ==1:        print(age)        return    guess_age(age,count)        guess_age(38,5)def guess_age(count): #age ==38 count =5    #age -=2 #36.34.32.30    count -= 1    if count ==1:        # print(age)        return 26    return guess_age(count) +2??res = guess_age(5)print(res)
def guess_age(count):# 5    count -= 1# 4    if count ==1:        return 26    return guess_age(count) +2#  guess_age(4) + 2 # guess_age(3) + 2 # guess_age(2) + 2# guess_age(5) = guess_age(4) + 2  = (guess_age(3) + 2) + 2 = ((guess_age(2) + 2) + 2) + 2 = 26 + 2 + 2 + 2 = 32# 26 + 2 =guess_age(3)=28  # 28+2=guess_age(4) = 30 # 30 + 2res = guess_age(5)print(res)

原文地址:https://www.cnblogs.com/zrx19960128/p/10970137.html

时间: 2024-10-11 22:02:00

6.3 迭代 递归的相关文章

101. 对称二叉树,c++迭代递归解法

101. 对称二叉树,c++迭代递归解法 给定一个二叉树,检查它是否是镜像对称的. 例如,二叉树?[1,2,2,3,4,4,3] 是对称的. 1 / 2 2 / \ / 3 4 4 3 但是下面这个?[1,2,2,null,3,null,3] 则不是镜像对称的: 1 / 2 2 \ 3 3 这道题可以用迭代和递归两种方法求解 迭代法代码如下,主要思想是,将树的左右分支放入两个队列中.因为题目是判断两个数是否对称,所以在将节点a的孩子放左队列时,先放a的右子结点,再放a的左子结点:在将节点b的孩子

【Tree】二叉树先序遍历 迭代 & 递归

1 /*************************** 2 https://leetcode.com/problems/binary-tree-preorder-traversal/ 3 @date 2015.5.13 4 @description 5 用非递归方法对二叉树进行先序遍历 6 借助辅助栈 7 每次先访问根节点,把节点压入栈,再转向其左孩子,直至左子树的左孩子为空,依次将栈顶元素出栈,转向右孩子. 8 9 10 ****************************/ 11

迭代 递归实例

在计算机编程实现中有常常两种方法:一曰迭代(iterate):二曰递归(recursion). 从"编程之美"的角度看,可以借用一句非常经典的话:"迭代是人,递归是神!"来从宏观上对二者进行把握. 从概念上讲,递归就是指程序调用自身的编程思想,即一个函数调用本身:迭代是利用已知的变量值,根据递推公式不断演进得到变量新值得编程思想. 从直观上讲,递归是将大问题化为相同结构的小问题,从待求解的问题出发,一直分解到已经已知答案的最小问题为止,然后再逐级返回,从而得到大问题

POJ 1753 Flip Game (迭代递归)

POJ 1753,题目链接http://poj.org/problem?id=1753. POJ 1753,题目链接http://poj.org/problem?id=1753. 总共有16个点.对某个点选择操作或者不操作.一共有2^16次方种可能. 从前往后枚举,保证不重复. 1 #include<stdio.h> 2 #include<string.h> 3 #include<math.h> 4 #include<algorithm> 5 #includ

二叉树的遍历-迭代&amp;递归

144. 二叉树的前序遍历 ?? 1 /** 2 * Definition for a binary tree node. 3 * public class TreeNode { 4 * int val; 5 * TreeNode left; 6 * TreeNode right; 7 * TreeNode(int x) { val = x; } 8 * } 9 */ 10 class Solution { 11 public List<Integer> preorderTraversal(T

PHP有关函数的编程思想(递归与迭代)

PHP有关函数的编程思想(递归与迭代) 递归思想(递归函数): 递归思想的一个基本形式是:在一个函数中,有至少一条语句,会去调用该函数自身. 但是从代码角度来说,如果单纯是函数内部调用函数,则会出现"出不来"的现象. 则我们就必须再来解决下一个问题:怎么终止(停止)这种自身的调用 -- 找到递归函数的出口 案例分析:写一个递归函数,该函数可以计算一个正整数的阶乘 数学基础: A:1的阶乘是1 B:大于1的数的阶乘是这个数减1的数的阶乘,乘以该数的结果. 比如:要求6的阶乘:则定义一个函

Java高频经典面试题(第一季)五:递归与迭代

编程题:  有n步台阶, 一次只能上 1步 或 2步, 共有多少种走法? 递归 循环迭代 递归: package will01; import org.junit.Test; public class TestStep { @Test public void test(){ long start = System.currentTimeMillis(); System.out.println(f(30)); long end = System.currentTimeMillis(); Syste

DNS域名服务详解(1)

Hosts文件:早期主机之间通过/etc/hosts文件进行名称解析 hosts文件格式: 主机IP地址  FQDN(完整合格域名)  别名 由于后来,互联网上主机数量成千上万增长,hosts文件更新不及时且效率低,进而出现了DNS DNS,全称Domain Name Service,域名解析服务 DNS属于分布式的数据库架, 上层域仅知道其直属下层域 下层域只知道根域(可通过设定修过) DNS顶级域主要分为组织域,国家域,反向域 组织域:  .com  .net  .org等 国家域:   .

Some thought about learning java

都说万事万物皆对象通过Java学习.确实有所体会.对于系统,我们所了解,于自然有生态系统,对于机械冷却系统,对于人体,有神经系统.java兴盛这么多年.在鄙人看来并非偶然.系统的构建不是一朝一夕能够完成的, 人与动物的区别在与人可以思考,可以学习模仿.java 是人发明的,同时我也认为是模仿而生的.一个Java程序可以认为是一系列对象的集合,而这些对象通过调用彼此的方法来协同工作.众多的程序便构成的我们的产品.如此一迭代递归的思想来看待.我们社会似乎有些类似.我们每一个人都是一个实例化得对象.而