美文网首页PythonPython
深入理解Python中的for循环语句

深入理解Python中的for循环语句

作者: 皮皮大 | 来源:发表于2021-10-09 17:06 被阅读0次

    公众号:尤而小屋
    作者:Peter
    编辑:Peter

    大家好,我是Peter~

    一年四季,循环往复:说到底就是一个循环的问题

    for语句实际上解决的是循环问题。在很多的高级语言中都有for循环(for loop)。

    for语句是编程语言中针对可迭代对象的语句,它的主要作用是允许代码被重复执行。看一段来自维基百科的介绍:

    In computer science, a for-loop (or simply for loop) is a control flow statement for specifying iteration, which allows code to be executed repeatedly。(作用:介绍了for循环是什么?)

    A for-loop has two parts: a header specifying the iteration, and a body which is executed once per iteration. (for循环是什么构成的?)

    • 是什么:在计算科学中,是针对特殊迭代对象的控制流语句,能够重复执行
    • 怎么构成:一个头部(是可迭代对象)+ 每个对象的执行体
    python

    可迭代对象

    什么是可迭代对象

    可迭代对象(Iteratable Object) 是能够一次返回其中一个成员的对象,比如我们常用的字符串、列表、元组、集合、字典等等之类的对象都属于可迭代对象,获取到这些对象我们就可以用for循环来进行操作。

    简单来理解,任何你可以循环遍历的对象都是可迭代对象

    怎么判断

    如何判断一个Python对象是不是可迭代对象?通常是使用 isinstance()函数来判断对象是否是可迭代对象

    from collections import Iterable
    
    image

    小结:在Python常见的数据对象中,只有数字是不可迭代的,字符串、元组、列表、字典等都是可迭代的

    字符串的for循环

    一次遍历打印字符串中的每个元素

    for i in "python": 
        print(i)    
    
    p
    y
    t
    h
    o
    n
    

    在看另一个例子:

    for i in "abcdefg":
        print(i)
    
    a
    b
    c
    d
    e
    f
    g
    

    列表的for循环

    不管是单层列表还是多层的嵌套列表,我们都可以遍历打印出来:

    # 单层列表
    
    a = ["小明","小红","小张","小王"]
    
    for i in a:
        print(i)  # 打印列表中的每个元素
    
    小明
    小红
    小张
    小王
    
    # 嵌套列表
    
    b = ["小明","小红","小张","小王",[19,20,18,23]]
    
    for i in b:
        print(i)
    
    小明
    小红
    小张
    小王
    [19, 20, 18, 23]
    

    上面的例子中最后一个元素当做整体被打印出来,如果也想分开打印呢?

    def qiantao(x):   # 定义一个函数
        for each in x:  # 遍历每个原始列表中的每个元素
            if isinstance(each, list):  # 判断每个元素是否是列表:isintance
                qiantao(each)  # 如果是列表,递归执行函数qiantao()
            else:
                print(each)  # 如果不是列表,就直接打印该元素
                
    b = ["小明","小红","小张","小王",[19,20,18,23]]
    
    # 调用函数,传入列表b
    qiantao(b)  
    
    小明
    小红
    小张
    小王
    19
    20
    18
    23
    

    元组的for循环

    元组tuple的循环和列表是类似的:

    t = ("小明","小红","小王")
    
    for i in t:
        print(i)
    
    小明
    小红
    小王
    

    字典的for循环

    我们使用keys()、values()、items(),我们可以分别遍历字典的键、值和键值对。需要注意的是:遍历字典默认是遍历字典的键,先定义一个字典:

    d = {"name":"Peter","age":20,"sex":"male","address":"china"}
    

    keys

    遍历字典的键;

    for i in d.keys():  # 遍历字典的键
        print(i)
    
    name
    age
    sex
    address
    
    for i in d:  # 默认就是遍历键的取值
        print(i)
    
    name
    age
    sex
    address
    

    values

    遍历字典的值:

    for i in d.values():  # 遍历字典的值
        print(i)
    
    Peter
    20
    male
    china
    

    items()

    同时遍历字典的键和值

    for i in d.items():  # 遍历字典的值
        print(i)
    
    ('name', 'Peter')
    ('age', 20)
    ('sex', 'male')
    ('address', 'china')
    

    分别取出字典的键和值:

    for k,v in d.items():
        print(k + "--->" + str(v))
    
    name--->Peter
    age--->20
    sex--->male
    address--->china
    

    range函数的for循环

    range函数是 Python 内置函数,用于生成一系列连续整数,多用于 for 循环中。

    range(start,stop,step)
    
    • start:包含start,默认为0,可不写则默认为0
    • stop:不包含stop,必须写
    • 步长step可正可负,默认是1,不能为0

    1、基础案例

    range(10)  # 生成的是可迭代对象
    
    range(0, 10) 
    

    默认开头是0

    range(0,10)
    
    range(0, 10)
    

    指定开头为1

    range(1,10)
    
    range(1, 10)
    

    下面是将结果展开成列表:

    list(range(10))  # 不包含10(尾部)
    
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    

    指定步长为2:

    list(range(0,10,2))  # 不包含10,步长是2
    
    [0, 2, 4, 6, 8]
    

    总结:range函数是包含头部不包含尾部

    for i in range(10):
        print(i)
    
    0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    

    2、找出100以内能够被5整除的数:

    for i in range(101):  # 不包含101,0-100
        if i % 5 == 0:  # %表示求余数:余数为0则表示整除
            print(i,end="、")
    
    0、5、10、15、20、25、30、35、40、45、50、55、60、65、70、75、80、85、90、95、100、
    

    3、高斯求和

    求出1到100的所有数之和

    sum = 0
    
    for i in range(1,101):
        sum = sum + i  # 每循环一次,sum就是这个数字
        
    sum
    
    5050
    

    求出100以内奇数的和:

    sum = 0
    
    # 步长为2,从1开始:1,3,5,7...
    for i in range(1,101,2):  
        sum = sum + i
        
    sum
    
    2500
    

    求出100以内偶数的和:

    sum = 0
    
    # 步长为2,从2开始:2,4,6,8...
    for i in range(2,101,2):  
        sum = sum + i
        
    sum
    
    2550
    

    多个for语句

    for语句中还可以再使用for语句:

    for i in ["python","java","html"]:
        for j in i:
            print(i.upper(),j)    # upper():将字母变成大写
    
    PYTHON p
    PYTHON y
    PYTHON t
    PYTHON h
    PYTHON o
    PYTHON n
    JAVA j
    JAVA a
    JAVA v
    JAVA a
    HTML h
    HTML t
    HTML m
    HTML l
    
    for i in [4,5,6]:
        for j in [1,2,3]:
            print(i*j)  # 实现任意两个数的乘法
    
    4  # 4*1
    8  # 4*2
    12 # 4*3
    5  # 5*1 
    10 # 5*2
    15 # 5*3
    6  # 6*1
    12 # 6*2
    18 # 6*3
    

    推导式

    (1)上面我们提到能够被5整除的数:使用for循环和if来解决

    five = []  # 定义空列表
    
    for i in range(101):  # 不包含101,0-100
        if i % 5 == 0:  # %表示求余数:余数为0则表示整除
            five.append(i)  # 添加到列表中
            
    five
    
    [0,
     5,
     10,
     15,
     20,
     25,
     30,
     35,
     40,
     45,
     50,
     55,
     60,
     65,
     70,
     75,
     80,
     85,
     90,
     95,
     100]
    

    (2)使用列表推导式如何实现呢?

    [x for x in range(101) if x % 5 == 0]
    
    [0,
     5,
     10,
     15,
     20,
     25,
     30,
     35,
     40,
     45,
     50,
     55,
     60,
     65,
     70,
     75,
     80,
     85,
     90,
     95,
     100]
    

    for-else

    也许你听过if-else,但是听到for-else语句吗?这也算是Python中的一个冷门知识点

    for i in range(5):
        print(i)
    else:
        print("结束")
    
    0
    1
    2
    3
    4
    结束
    

    也就是说:for语句结束了依然会执行else的语句

    for i in []:
        print(i)
        
    else:
        print("结束")
    
    结束
    

    下面的例子中,当i除以3的余数是2的时候回跳出并终止整个for循环,后面的else就不会执行了

    for i in range(10):
        print(i)
        if i % 3 == 2:
            break
    else:
        print("结束")
    
    0
    1
    2
    

    实现三角阵列

    for i in range(1,11):
        for k in range(1,i):
            print(k, end=" ")
        print("\n")
    
    1 
    1 2 
    1 2 3 
    1 2 3 4 
    1 2 3 4 5 
    1 2 3 4 5 6 
    1 2 3 4 5 6 7 
    1 2 3 4 5 6 7 8 
    1 2 3 4 5 6 7 8 9 
    

    如果我们想要倒过来,该如何实现呢?

    for i in range(10,0,-1):
        for k in range(1,i):
            print(k, end=" ")
        print("\n")
    
    1 2 3 4 5 6 7 8 9 
    1 2 3 4 5 6 7 8 
    1 2 3 4 5 6 7 
    1 2 3 4 5 6 
    1 2 3 4 5 
    1 2 3 4 
    1 2 3 
    1 2 
    1       
    

    99乘法表

    下面举个例子来说明如何实现99乘法表,如何玩转99乘法表参考以前的文章

    for i in range(1,10):
        for j in range(1,i+1):  # 为了保证有4*4,也就是同个数字相乘的等式,需要让i出现,使用i+1
            print('{}x{}={}'.format(j, i, i*j), end=" ")  # end的结束符号用空格
        print("\n")
    
    image

    相关文章

      网友评论

        本文标题:深入理解Python中的for循环语句

        本文链接:https://www.haomeiwen.com/subject/dcgqoltx.html