1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        Python中的for循環(huán),沒你想的那么簡(jiǎn)單~

        共 4994字,需瀏覽 10分鐘

         ·

        2021-10-14 17:19

        公眾號(hào):尤而小屋
        作者:Peter


        一年四季,循環(huán)往復(fù):說(shuō)到底就是一個(gè)循環(huán)的問(wèn)題

        for語(yǔ)句實(shí)際上解決的是循環(huán)問(wèn)題。在很多的高級(jí)語(yǔ)言中都有for循環(huán)(for loop)。

        for語(yǔ)句其實(shí)是編程語(yǔ)言中針對(duì)可迭代對(duì)象的語(yǔ)句,它的主要作用是允許代碼被重復(fù)執(zhí)行。看一段來(lái)自維基百科的介紹:

        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循環(huán)是什么?)

        A for-loop has two parts: a header specifying the iteration, and a body which is executed once per iteration. (for循環(huán)是什么構(gòu)成的?)

        • 是什么:在計(jì)算科學(xué)中,是針對(duì)特殊迭代對(duì)象的控制流語(yǔ)句,能夠重復(fù)執(zhí)行
        • 怎么構(gòu)成:一個(gè)頭部(是可迭代對(duì)象)+ 每個(gè)對(duì)象的執(zhí)行

        本文的主要內(nèi)容如下:

        1、可迭代對(duì)象

        1.1什么是可迭代對(duì)象

        可迭代對(duì)象(Iteratable Object) 是能夠一次返回其中一個(gè)成員的對(duì)象,比如我們常用的字符串、列表、元組、集合、字典等等之類的對(duì)象都屬于可迭代對(duì)象,獲取到這些對(duì)象我們就可以用for循環(huán)來(lái)進(jìn)行操作。

        簡(jiǎn)單來(lái)理解,任何你可以循環(huán)遍歷的對(duì)象都是可迭代對(duì)象。

        1.2怎么判斷

        如何判斷一個(gè)Python對(duì)象是不是可迭代對(duì)象?通常是使用 isinstance()函數(shù)來(lái)判斷對(duì)象是否是可迭代對(duì)象

        from?collections?import?Iterable

        小結(jié):在Python常見的數(shù)據(jù)對(duì)象中,只有數(shù)字是不可迭代的,字符串、元組、列表、字典等都是可迭代的

        2、字符串的for循環(huán)

        一次遍歷打印字符串中的每個(gè)元素

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

        在看另一個(gè)例子:

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

        3、列表的for循環(huán)

        不管是單層列表還是多層的嵌套列表,我們都可以遍歷打印出來(lái):

        #?單層列表

        a?=?["小明","小紅","小張","小王"]

        for?i?in?a:
        ????print(i)??#?打印列表中的每個(gè)元素
        小明
        小紅
        小張
        小王
        #?嵌套列表

        b?=?["小明","小紅","小張","小王",[19,20,18,23]]

        for?i?in?b:
        ????print(i)
        小明
        小紅
        小張
        小王
        [19, 20, 18, 23]

        上面的例子中最后一個(gè)元素當(dāng)做整體被打印出來(lái),如果也想分開打印呢?

        def?qiantao(x):???#?定義一個(gè)函數(shù)
        ????for?each?in?x:??#?遍歷每個(gè)原始列表中的每個(gè)元素
        ????????if?isinstance(each,?list):??#?判斷每個(gè)元素是否是列表:isintance
        ????????????qiantao(each)??#?如果是列表,遞歸執(zhí)行函數(shù)qiantao()
        ????????else:
        ????????????print(each)??#?如果不是列表,就直接打印該元素
        ????????????
        b?=?["小明","小紅","小張","小王",[19,20,18,23]]

        #?調(diào)用函數(shù),傳入列表b
        qiantao(b)??
        小明
        小紅
        小張
        小王
        19
        20
        18
        23

        4、元組的for循環(huán)

        元組tuple的循環(huán)和列表是類似的:

        t?=?("小明","小紅","小王")

        for?i?in?t:
        ????print(i)
        小明
        小紅
        小王

        5、字典的for循環(huán)

        我們使用keys()、values()、items(),我們可以分別遍歷字典的鍵、值和鍵值對(duì)。需要注意的是:遍歷字典默認(rèn)是遍歷字典的鍵,先定義一個(gè)字典:

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

        5.1keys()

        遍歷字典的鍵;

        for?i?in?d.keys():??#?遍歷字典的鍵
        ????print(i)
        name
        age
        sex
        address
        for?i?in?d:??#?默認(rèn)就是遍歷鍵的取值
        ????print(i)
        name
        age
        sex
        address

        5.2 values()

        遍歷字典的值:

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

        5.3 items()

        同時(shí)遍歷字典的鍵和值

        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

        6、range函數(shù)的for循環(huán)

        range函數(shù)是 Python 內(nèi)置函數(shù),用于生成一系列連續(xù)整數(shù),多用于 for 循環(huán)中。

        range(start,stop,step)
        • start:包含start,默認(rèn)為0,可不寫則默認(rèn)為0
        • stop:不包含stop,必須寫
        • 步長(zhǎng)step可正可負(fù),默認(rèn)是1,不能為0

        1、基礎(chǔ)案例

        range(10)??#?生成的是可迭代對(duì)象
        range(0, 10)

        默認(rèn)開頭是0

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

        指定開頭為1

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

        下面是將結(jié)果展開成列表:

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

        指定步長(zhǎng)為2:

        list(range(0,10,2))??#?不包含10,步長(zhǎng)是2
        [0, 2, 4, 6, 8]

        總結(jié):range函數(shù)是包含頭部不包含尾部

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

        2、找出100以內(nèi)能夠被5整除的數(shù):

        for?i?in?range(101):??#?不包含101,0-100
        ????if?i?%?5?==?0:??#?%表示求余數(shù):余數(shù)為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的所有數(shù)之和

        sum?=?0

        for?i?in?range(1,101):
        ????sum?=?sum?+?i??#?每循環(huán)一次,sum就是這個(gè)數(shù)字
        ????
        sum
        5050

        求出100以內(nèi)奇數(shù)的和:

        sum?=?0

        #?步長(zhǎng)為2,從1開始:1,3,5,7...
        for?i?in?range(1,101,2):??
        ????sum?=?sum?+?i
        ????
        sum
        2500

        求出100以內(nèi)偶數(shù)的和:

        sum?=?0

        #?步長(zhǎng)為2,從2開始:2,4,6,8...
        for?i?in?range(2,101,2):??
        ????sum?=?sum?+?i
        ????
        sum
        2550

        7、多個(gè)for語(yǔ)句

        for語(yǔ)句中還可以再使用for語(yǔ)句:

        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)??#?實(shí)現(xiàn)任意兩個(gè)數(shù)的乘法
        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

        8、列表推導(dǎo)式

        (1)上面我們提到能夠被5整除的數(shù):使用for循環(huán)和if來(lái)解決

        five?=?[]??#?定義空列表

        for?i?in?range(101):??#?不包含101,0-100
        ????if?i?%?5?==?0:??#?%表示求余數(shù):余數(shù)為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)使用列表推導(dǎo)式如何實(shí)現(xiàn)呢?

        [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]

        9、for-else

        也許你聽過(guò)if-else,但是聽到for-else語(yǔ)句嗎?這也算是Python中的一個(gè)冷門知識(shí)點(diǎn)

        for?i?in?range(5):
        ????print(i)
        else:
        ????print("結(jié)束")
        0
        1
        2
        3
        4
        結(jié)束

        也就是說(shuō):for語(yǔ)句結(jié)束了依然會(huì)執(zhí)行else的語(yǔ)句

        for?i?in?[]:
        ????print(i)
        ????
        else:
        ????print("結(jié)束")
        結(jié)束

        下面的例子中,當(dāng)i除以3的余數(shù)是2的時(shí)候回跳出并終止整個(gè)for循環(huán),后面的else就不會(huì)執(zhí)行了

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

        10、實(shí)現(xiàn)三角陣列

        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

        如果我們想要倒過(guò)來(lái),該如何實(shí)現(xiàn)呢?

        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

        11、99乘法表

        下面舉個(gè)例子來(lái)說(shuō)明如何實(shí)現(xiàn)99乘法表,如何玩轉(zhuǎn)99乘法表參考以前的文章

        直到今天,我終于學(xué)會(huì)99乘法表啦~

        for?i?in?range(1,10):
        ????for?j?in?range(1,i+1):??#?為了保證有4*4,也就是同個(gè)數(shù)字相乘的等式,需要讓i出現(xiàn),使用i+1
        ????????print('{}x{}={}'.format(j,?i,?i*j),?end="?")??#?end的結(jié)束符號(hào)用空格
        ????print("\n")

        往期推薦

        1、Python 3.10 正式發(fā)布了!我發(fā)現(xiàn)了一個(gè)可怕的功能...

        2、如何找出 Python 程序中最慢的那行代碼?

        3、寫 Python 代碼不可不知的函數(shù)式編程技術(shù)(留言送書)

        4、某公司領(lǐng)導(dǎo)稱“80后就該退出iT行業(yè)”,遭網(wǎng)友怒噴

        5、稚暉君自制機(jī)械臂,能給葡萄縫針的那種,成本1萬(wàn)塊,網(wǎng)友:能把腦子開源一下?


        點(diǎn)擊關(guān)注公眾號(hào),閱讀更多精彩內(nèi)容
        瀏覽 114
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            久久艹免费视频 | 日韩一级无码视频免费的网站 | 最近中文字幕免费mv第一季歌词強上 | 少妇69av | 国产精品高潮露脸在线观看 | 欧美操屄电影 | 日韩精品一区二区三区熟女人妻网站 | 国模极品美軳人体销魂 | 亚洲AV无码片一区二区三区 | 无码成人视频 |