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>

        (附代碼)干貨 | 18個(gè) Python 高效編程技巧

        共 8234字,需瀏覽 17分鐘

         ·

        2021-08-17 21:46

        點(diǎn)擊左上方藍(lán)字關(guān)注我們



        一個(gè)專注于目標(biāo)檢測(cè)與深度學(xué)習(xí)知識(shí)分享的公眾號(hào)

        編者薦語(yǔ)
        初識(shí)Python語(yǔ)言,覺得python滿足了我上學(xué)時(shí)候?qū)幊陶Z(yǔ)言的所有要求。python語(yǔ)言的高效編程技巧讓我們這些大學(xué)曾經(jīng)苦逼學(xué)了四年c或者c++的人,興奮的不行不行的,終于解脫了。高級(jí)語(yǔ)言,如果做不到這樣,還扯啥高級(jí)呢?

        轉(zhuǎn)載自 | Python數(shù)據(jù)科學(xué)



        01 交換變量



        >>>a=3

        >>>b=6



        這個(gè)情況如果要交換變量在c++中,肯定需要一個(gè)空變量。但是python不需要,只需一行,大家看清楚了



        >>>a,b=b,a

        >>>print(a)>>>6

        >>>ptint(b)>>>5



        02 字典推導(dǎo)(Dictionary comprehensions)和集合推導(dǎo)(Set comprehensions)

        大多數(shù)的Python程序員都知道且使用過(guò)列表推導(dǎo)(list comprehensions)。如果你對(duì)list comprehensions概念不是很熟悉——一個(gè)list comprehension就是一個(gè)更簡(jiǎn)短、簡(jiǎn)潔的創(chuàng)建一個(gè)list的方法。



        >>> some_list = [12345]

        >>> another_list = [ x + 1 for x in some_list ]

        >>> another_list
        [23456]



        自從python 3.1 起,我們可以用同樣的語(yǔ)法來(lái)創(chuàng)建集合和字典表:



        >>> # Set Comprehensions
        >>> some_list = [1234525148]

        >>> even_set = { x for x in some_list if x % 2 == 0 }

        >>> even_set
        set([824])

        >>> # Dict Comprehensions

        >>> d = { x: x % 2 == 0 for x in range(111) }

        >>> d
        {1False2True3False4True5False6True7False8True9False10True}



        在第一個(gè)例子里,我們以some_list為基礎(chǔ),創(chuàng)建了一個(gè)具有不重復(fù)元素的集合,而且集合里只包含偶數(shù)。而在字典表的例子里,我們創(chuàng)建了一個(gè)key是不重復(fù)的1到10之間的整數(shù),value是布爾型,用來(lái)指示key是否是偶數(shù)。


        這里另外一個(gè)值得注意的事情是集合的字面量表示法。我們可以簡(jiǎn)單的用這種方法創(chuàng)建一個(gè)集合:



        >>> my_set = {121234}

        >>> my_set
        set([1234])



        而不需要使用內(nèi)置函數(shù)set()。


        03 計(jì)數(shù)時(shí)使用Counter計(jì)數(shù)對(duì)象

        這聽起來(lái)顯而易見,但經(jīng)常被人忘記。對(duì)于大多數(shù)程序員來(lái)說(shuō),數(shù)一個(gè)東西是一項(xiàng)很常見的任務(wù),而且在大多數(shù)情況下并不是很有挑戰(zhàn)性的事情——這里有幾種方法能更簡(jiǎn)單的完成這種任務(wù)。


        Python的collections類庫(kù)里有個(gè)內(nèi)置的dict類的子類,是專門來(lái)干這種事情的:



        >>> from collections import Counter
        >>> c = Counter('hello world')

        >>> c
        Counter({'l'3'o'2' '1'e'1'd'1'h'1'r'1'w'1})

        >>> c.most_common(2)
        [('l'3), ('o'2)]



        04 漂亮的打印出JSON

        JSON是一種非常好的數(shù)據(jù)序列化的形式,被如今的各種API和web service大量的使用。使用python內(nèi)置的json處理,可以使JSON串具有一定的可讀性,但當(dāng)遇到大型數(shù)據(jù)時(shí),它表現(xiàn)成一個(gè)很長(zhǎng)的、連續(xù)的一行時(shí),人的肉眼就很難觀看了。


        為了能讓JSON數(shù)據(jù)表現(xiàn)的更友好,我們可以使用indent參數(shù)來(lái)輸出漂亮的JSON。當(dāng)在控制臺(tái)交互式編程或做日志時(shí),這尤其有用:



        >>> import json

        >>> print(json.dumps(data))  # No indention
        {"status""OK""count"2"results": [{"age"27"name""Oz""lactose_intolerant"true}, {"age"29"name""Joe""lactose_intolerant"false}]}

        >>> print(json.dumps(data, indent=2))  # With indention

        {
          "status""OK",
          "count"2,
          "results": [

            {
              "age"27,
              "name""Oz",

              "lactose_intolerant"true
            },
            {
              "age"29,

              "name""Joe",
              "lactose_intolerant"false
            }
          ]

        }



        同樣,使用內(nèi)置的pprint模塊,也可以讓其它任何東西打印輸出的更漂亮。


        05 解決FizzBuzz

        前段時(shí)間Jeff Atwood 推廣了一個(gè)簡(jiǎn)單的編程練習(xí)叫FizzBuzz,問題引用如下:

        寫一個(gè)程序,打印數(shù)字1到100,3的倍數(shù)打印“Fizz”來(lái)替換這個(gè)數(shù),5的倍數(shù)打印“Buzz”,對(duì)于既是3的倍數(shù)又是5的倍數(shù)的數(shù)字打印“FizzBuzz”。

        這里就是一個(gè)簡(jiǎn)短的,有意思的方法解決這個(gè)問題:


        for x in range(1,101):
            print"fizz"[x%3*len('fizz')::]+"buzz"[x%5*len('buzz')::] or x




        06 if 語(yǔ)句在行內(nèi)



        print "Hello" if True else "World"
        >>> Hello




        07 連接

        下面的最后一種方式在綁定兩個(gè)不同類型的對(duì)象時(shí)顯得很cool。



        nfc = ["Packers""49ers"]
        afc = ["Ravens""Patriots"]
        print nfc + afc
        >>> ['Packers''49ers''Ravens''Patriots']

        print str(1) + " world"
        >>1 world

        print `1` + " world"
        >>1 world

        print 1"world"
        >>1 world
        print nfc, 1
        >>> ['Packers''49ers'1



        08 數(shù)值比較

        這是我見過(guò)諸多語(yǔ)言中很少有的如此棒的簡(jiǎn)便法。



        x = 2
        if 3 > x > 1:
           print x
        >>2
        if 1 < x > 0:
           print x
        >>2




        09 同時(shí)迭代兩個(gè)列表



        nfc = ["Packers""49ers"]
        afc = ["Ravens""Patriots"]
        for teama, teamb in zip(nfc, afc):
             print teama + " vs. " + teamb
        >>> Packers vs. Ravens
        >>49ers vs. Patriots




        10 帶索引的列表迭代



        teams = ["Packers""49ers""Ravens""Patriots"]
        for index, team in enumerate(teams):
            print index, team
        >>0 Packers
        >>1 49ers
        >>2 Ravens
        >>3 Patriots




        11 列表推導(dǎo)式

        已知一個(gè)列表,我們可以刷選出偶數(shù)列表方法:



        numbers = [1,2,3,4,5,6]
        even = []
        for number in numbers:
            if number%2 == 0:
                even.append(number)



        轉(zhuǎn)變成如下:



        numbers = [1,2,3,4,5,6]
        even = [number for number in numbers if number%2 == 0]



        12 字典推導(dǎo)

        和列表推導(dǎo)類似,字典可以做同樣的工作:



        teams = ["Packers""49ers""Ravens""Patriots"]
        print {key: value for valuekey in enumerate(teams)}
        >>> 
        {'49ers'1'Ravens'2'Patriots'3'Packers'0}




        13 初始化列表的值



        items = [0]*3
        print items
        >>> [0,0,0]




        14 列表轉(zhuǎn)換為字符串



        teams = ["Packers""49ers""Ravens""Patriots"]
        print ", ".join(teams)
        >>'Packers, 49ers, Ravens, Patriots'




        15 從字典中獲取元素

        我承認(rèn)try/except代碼并不雅致,不過(guò)這里有一種簡(jiǎn)單方法,嘗試在字典中查找key,如果沒有找到對(duì)應(yīng)的alue將用第二個(gè)參數(shù)設(shè)為其變量值。



        data = {'user'1'name''Max''three'4}
        try:
           is_admin = data['admin']
        except KeyError:
           is_admin = False



        替換成這樣



        data = {'user'1'name''Max''three'4}
        is_admin = data.get('admin'False)



        16 獲取列表的子集

        有時(shí),你只需要列表中的部分元素,這里是一些獲取列表子集的方法。



        x = [1,2,3,4,5,6]
        #前3個(gè)
        print x[:3]
        >>> [1,2,3]
        #中間4個(gè)
        print x[1:5]
        >>> [2,3,4,5]
        #最后3個(gè)
        print x[3:]
        >>> [4,5,6]
        #奇數(shù)項(xiàng)
        print x[::2]
        >>> [1,3,5]
        #偶數(shù)項(xiàng)
        print x[1::2]
        >>> [2,4,6]



        除了python內(nèi)置的數(shù)據(jù)類型外,在collection模塊同樣還包括一些特別的用例,在有些場(chǎng)合Counter非常實(shí)用。如果你參加過(guò)在這一年的Facebook HackerCup,你甚至也能找到他的實(shí)用之處。



        from collections import Counter
        print Counter("hello")
        >>> Counter({'l'2'h'1'e'1'o'1})



        17 迭代工具

        和collections庫(kù)一樣,還有一個(gè)庫(kù)叫itertools,對(duì)某些問題真能高效地解決。其中一個(gè)用例是查找所有組合,他能告訴你在一個(gè)組中元素的所有不能的組合方式。



        from itertools import combinations
        teams = ["Packers""49ers""Ravens""Patriots"]
        for game in combinations(teams, 2):
            print game
        >>> ('Packers''49ers')
        >>> ('Packers''Ravens')
        >>> ('Packers''Patriots')
        >>> ('49ers''Ravens')
        >>> ('49ers''Patriots')
        >>> ('Ravens''Patriots')



        18 False == True

        比起實(shí)用技術(shù)來(lái)說(shuō)這是一個(gè)很有趣的事,在python中,True和False是全局變量,因此:



        False = True
        if False:
           print "Hello"
        else:
           print "World"
        >>> Hello



        END



        雙一流大學(xué)研究生團(tuán)隊(duì)創(chuàng)建,專注于目標(biāo)檢測(cè)與深度學(xué)習(xí),希望可以將分享變成一種習(xí)慣!

        整理不易,點(diǎn)贊三連↓

        瀏覽 51
        點(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>
            国产精品996 | 草比视频网 | 色色噜噜激情综合久久 | 黑人大鸡巴操逼视频 | www.豆花福利视频 | 91人妻日韩人妻无码专区精品 | 色呦呦国产 | 91亚洲欧美激情 | 国产性色av高清在线观看男人扒开 | 国产超碰自拍 |