<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        35個Python編程小技巧

        來源:懂視網 責編:小采 時間:2020-11-27 14:38:30
        文檔

        35個Python編程小技巧

        35個Python編程小技巧:這篇博客其實就是這個集合整理后一部分的公開亮相。如果你已經是個python大牛,那么基本上你應該知道這里面的大多數用法了,但我想你應該也能發現一些你不知道的新技巧。而如果你之前是一個c,c++,java的程序員,同時在學習python,或者干脆就是一個剛剛學習編
        推薦度:
        導讀35個Python編程小技巧:這篇博客其實就是這個集合整理后一部分的公開亮相。如果你已經是個python大牛,那么基本上你應該知道這里面的大多數用法了,但我想你應該也能發現一些你不知道的新技巧。而如果你之前是一個c,c++,java的程序員,同時在學習python,或者干脆就是一個剛剛學習編

        這篇博客其實就是這個集合整理后一部分的公開亮相。如果你已經是個python大牛,那么基本上你應該知道這里面的大多數用法了,但我想你應該也能發現一些你不知道的新技巧。而如果你之前是一個c,c++,java的程序員,同時在學習python,或者干脆就是一個剛剛學習編程的新手,那么你應該會看到很多特別有用能讓你感到驚奇的實用技巧,就像我當初一樣。

        每一個技巧和語言用法都會在一個個實例中展示給大家,也不需要有其他的說明。我已經盡力把每個例子弄的通俗易懂,但是因為讀者對python的熟悉程度不同,仍然可能難免有一些晦澀的地方。所以如果這些例子本身無法讓你讀懂,至少這個例子的標題在你后面去google搜索的時候會幫到你。

        整個集合大概是按照難易程度排序,簡單常見的在前面,比較少見的在最后。

        1.1 拆箱

        代碼如下:


        >>> a, b, c = 1, 2, 3
        >>> a, b, c
        (1, 2, 3)
        >>> a, b, c = [1, 2, 3]
        >>> a, b, c
        (1, 2, 3)
        >>> a, b, c = (2 * i + 1 for i in range(3))
        >>> a, b, c
        (1, 3, 5)
        >>> a, (b, c), d = [1, (2, 3), 4]
        >>> a
        1
        >>> b
        2
        >>> c
        3
        >>> d
        4


        1.2 拆箱變量交換

        代碼如下:

        >>> a, b = 1, 2
        >>> a, b = b, a
        >>> a, b
        (2, 1)


        1.3 擴展拆箱(只兼容python3)

        代碼如下:

        >>> a, *b, c = [1, 2, 3, 4, 5]
        >>> a
        1
        >>> b
        [2, 3, 4]
        >>> c
        5


        1.4 負數索引

        代碼如下:

        >>> a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
        >>> a[-1]
        10
        >>> a[-3]
        8


        1.5 切割列表

        代碼如下:

        >>> a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
        >>> a[2:8]
        [2, 3, 4, 5, 6, 7]


        1.6 負數索引切割列表

        代碼如下:

        >>> a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
        >>> a[-4:-2]
        [7, 8]


        1.7指定步長切割列表

        代碼如下:

        >>> a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
        >>> a[::2]
        [0, 2, 4, 6, 8, 10]
        >>> a[::3]
        [0, 3, 6, 9]
        >>> a[2:8:2]
        [2, 4, 6]


        1.8 負數步長切割列表

        代碼如下:

        >>> a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
        >>> a[::-1]
        [10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
        >>> a[::-2]
        [10, 8, 6, 4, 2, 0]


        1.9 列表切割賦值

        代碼如下:

        >>> a = [1, 2, 3, 4, 5]
        >>> a[2:3] = [0, 0]
        >>> a
        [1, 2, 0, 0, 4, 5]
        >>> a[1:1] = [8, 9]
        >>> a
        [1, 8, 9, 2, 0, 0, 4, 5]
        >>> a[1:-1] = []
        >>> a
        [1, 5]


        1.10 命名列表切割方式

        代碼如下:

        >>> a = [0, 1, 2, 3, 4, 5]
        >>> LASTTHREE = slice(-3, None)
        >>> LASTTHREE
        slice(-3, None, None)
        >>> a[LASTTHREE]
        [3, 4, 5]


        1.11 列表以及迭代器的壓縮和解壓縮

        代碼如下:

        >>> a = [1, 2, 3]
        >>> b = ['a', 'b', 'c']
        >>> z = zip(a, b)
        >>> z
        [(1, 'a'), (2, 'b'), (3, 'c')]
        >>> zip(*z)
        [(1, 2, 3), ('a', 'b', 'c')]


        1.12 列表相鄰元素壓縮器

        代碼如下:

        >>> a = [1, 2, 3, 4, 5, 6]
        >>> zip(*([iter(a)] * 2))
        [(1, 2), (3, 4), (5, 6)]

        >>> group_adjacent = lambda a, k: zip(*([iter(a)] * k))
        >>> group_adjacent(a, 3)
        [(1, 2, 3), (4, 5, 6)]
        >>> group_adjacent(a, 2)
        [(1, 2), (3, 4), (5, 6)]
        >>> group_adjacent(a, 1)
        [(1,), (2,), (3,), (4,), (5,), (6,)]

        >>> zip(a[::2], a[1::2])
        [(1, 2), (3, 4), (5, 6)]

        >>> zip(a[::3], a[1::3], a[2::3])
        [(1, 2, 3), (4, 5, 6)]

        >>> group_adjacent = lambda a, k: zip(*(a[i::k] for i in range(k)))
        >>> group_adjacent(a, 3)
        [(1, 2, 3), (4, 5, 6)]
        >>> group_adjacent(a, 2)
        [(1, 2), (3, 4), (5, 6)]
        >>> group_adjacent(a, 1)
        [(1,), (2,), (3,), (4,), (5,), (6,)]


        1.13 在列表中用壓縮器和迭代器滑動取值窗口

        代碼如下:

        >>> def n_grams(a, n):
        ... z = [iter(a[i:]) for i in range(n)]
        ... return zip(*z)
        ...
        >>> a = [1, 2, 3, 4, 5, 6]
        >>> n_grams(a, 3)
        [(1, 2, 3), (2, 3, 4), (3, 4, 5), (4, 5, 6)]
        >>> n_grams(a, 2)
        [(1, 2), (2, 3), (3, 4), (4, 5), (5, 6)]
        >>> n_grams(a, 4)
        [(1, 2, 3, 4), (2, 3, 4, 5), (3, 4, 5, 6)]


        1.14 用壓縮器反轉字典

        代碼如下:

        >>> m = {'a': 1, 'b': 2, 'c': 3, 'd': 4}
        >>> m.items()
        [('a', 1), ('c', 3), ('b', 2), ('d', 4)]
        >>> zip(m.values(), m.keys())
        [(1, 'a'), (3, 'c'), (2, 'b'), (4, 'd')]
        >>> mi = dict(zip(m.values(), m.keys()))
        >>> mi
        {1: 'a', 2: 'b', 3: 'c', 4: 'd'}


        1.15 列表展開

        代碼如下:

        >>> a = [[1, 2], [3, 4], [5, 6]]
        >>> list(itertools.chain.from_iterable(a))
        [1, 2, 3, 4, 5, 6]

        >>> sum(a, [])
        [1, 2, 3, 4, 5, 6]

        >>> [x for l in a for x in l]
        [1, 2, 3, 4, 5, 6]

        >>> a = [[[1, 2], [3, 4]], [[5, 6], [7, 8]]]
        >>> [x for l1 in a for l2 in l1 for x in l2]
        [1, 2, 3, 4, 5, 6, 7, 8]

        >>> a = [1, 2, [3, 4], [[5, 6], [7, 8]]]
        >>> flatten = lambda x: [y for l in x for y in flatten(l)] if type(x) is list else [x]
        >>> flatten(a)
        [1, 2, 3, 4, 5, 6, 7, 8]


        1.16 生成器表達式

        代碼如下:

        >>> g = (x ** 2 for x in xrange(10))
        >>> next(g)
        0
        >>> next(g)
        1
        >>> next(g)
        4
        >>> next(g)
        9
        >>> sum(x ** 3 for x in xrange(10))
        2025
        >>> sum(x ** 3 for x in xrange(10) if x % 3 == 1)
        408


        1.17 字典推導

        代碼如下:

        >>> m = {x: x ** 2 for x in range(5)}
        >>> m
        {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}

        >>> m = {x: 'A' + str(x) for x in range(10)}
        >>> m
        {0: 'A0', 1: 'A1', 2: 'A2', 3: 'A3', 4: 'A4', 5: 'A5', 6: 'A6', 7: 'A7', 8: 'A8', 9: 'A9'}


        1.18 用字典推導反轉字典

        代碼如下:

        >>> m = {'a': 1, 'b': 2, 'c': 3, 'd': 4}
        >>> m
        {'d': 4, 'a': 1, 'b': 2, 'c': 3}
        >>> {v: k for k, v in m.items()}
        {1: 'a', 2: 'b', 3: 'c', 4: 'd'}


        1.19 命名元組

        代碼如下:

        >>> Point = collections.namedtuple('Point', ['x', 'y'])
        >>> p = Point(x=1.0, y=2.0)
        >>> p
        Point(x=1.0, y=2.0)
        >>> p.x
        1.0
        >>> p.y


        2.0
        1.20 繼承命名元組

        代碼如下:

        >>> class Point(collections.namedtuple('PointBase', ['x', 'y'])):
        ... __slots__ = ()
        ... def __add__(self, other):
        ... return Point(x=self.x + other.x, y=self.y + other.y)
        ...
        >>> p = Point(x=1.0, y=2.0)
        >>> q = Point(x=2.0, y=3.0)
        >>> p + q
        Point(x=3.0, y=5.0)


        1.21 操作集合

        代碼如下:

        >>> A = {1, 2, 3, 3}
        >>> A
        set([1, 2, 3])
        >>> B = {3, 4, 5, 6, 7}
        >>> B
        set([3, 4, 5, 6, 7])
        >>> A | B
        set([1, 2, 3, 4, 5, 6, 7])
        >>> A & B
        set([3])
        >>> A - B
        set([1, 2])
        >>> B - A
        set([4, 5, 6, 7])
        >>> A ^ B
        set([1, 2, 4, 5, 6, 7])
        >>> (A ^ B) == ((A - B) | (B - A))
        True


        1.22 操作多重集合

        代碼如下:

        >>> A = collections.Counter([1, 2, 2])
        >>> B = collections.Counter([2, 2, 3])
        >>> A
        Counter({2: 2, 1: 1})
        >>> B
        Counter({2: 2, 3: 1})
        >>> A | B
        Counter({2: 2, 1: 1, 3: 1})
        >>> A & B
        Counter({2: 2})
        >>> A + B
        Counter({2: 4, 1: 1, 3: 1})
        >>> A - B
        Counter({1: 1})
        >>> B - A
        Counter({3: 1})


        1.23 統計在可迭代器中最常出現的元素

        代碼如下:

        >>> A = collections.Counter([1, 1, 2, 2, 3, 3, 3, 3, 4, 5, 6, 7])
        >>> A
        Counter({3: 4, 1: 2, 2: 2, 4: 1, 5: 1, 6: 1, 7: 1})
        >>> A.most_common(1)
        [(3, 4)]
        >>> A.most_common(3)
        [(3, 4), (1, 2), (2, 2)]


        1.24 兩端都可操作的隊列

        代碼如下:

        >>> Q = collections.deque()
        >>> Q.append(1)
        >>> Q.appendleft(2)
        >>> Q.extend([3, 4])
        >>> Q.extendleft([5, 6])
        >>> Q
        deque([6, 5, 2, 1, 3, 4])
        >>> Q.pop()
        4
        >>> Q.popleft()
        6
        >>> Q
        deque([5, 2, 1, 3])
        >>> Q.rotate(3)
        >>> Q
        deque([2, 1, 3, 5])
        >>> Q.rotate(-3)
        >>> Q
        deque([5, 2, 1, 3])


        1.25 有最大長度的雙端隊列

        代碼如下:

        >>> last_three = collections.deque(maxlen=3)
        >>> for i in xrange(10):
        ... last_three.append(i)
        ... print ', '.join(str(x) for x in last_three)
        ...
        0
        0, 1
        0, 1, 2
        1, 2, 3
        2, 3, 4
        3, 4, 5
        4, 5, 6
        5, 6, 7
        6, 7, 8
        7, 8, 9


        1.26 可排序詞典

        代碼如下:

        >>> m = dict((str(x), x) for x in range(10))
        >>> print ', '.join(m.keys())
        1, 0, 3, 2, 5, 4, 7, 6, 9, 8
        >>> m = collections.OrderedDict((str(x), x) for x in range(10))
        >>> print ', '.join(m.keys())
        0, 1, 2, 3, 4, 5, 6, 7, 8, 9
        >>> m = collections.OrderedDict((str(x), x) for x in range(10, 0, -1))
        >>> print ', '.join(m.keys())
        10, 9, 8, 7, 6, 5, 4, 3, 2, 1


        1.27 默認詞典

        代碼如下:

        >>> m = dict()
        >>> m['a']
        Traceback (most recent call last):
        File "", line 1, in
        KeyError: 'a'
        >>>
        >>> m = collections.defaultdict(int)
        >>> m['a']
        0
        >>> m['b']
        0
        >>> m = collections.defaultdict(str)
        >>> m['a']
        ''
        >>> m['b'] += 'a'
        >>> m['b']
        'a'
        >>> m = collections.defaultdict(lambda: '[default value]')
        >>> m['a']
        '[default value]'
        >>> m['b']
        '[default value]'


        1.28 默認字典的簡單樹狀表達

        代碼如下:

        >>> import json
        >>> tree = lambda: collections.defaultdict(tree)
        >>> root = tree()
        >>> root['menu']['id'] = 'file'
        >>> root['menu']['value'] = 'File'
        >>> root['menu']['menuitems']['new']['value'] = 'New'
        >>> root['menu']['menuitems']['new']['onclick'] = 'new();'
        >>> root['menu']['menuitems']['open']['value'] = 'Open'
        >>> root['menu']['menuitems']['open']['onclick'] = 'open();'
        >>> root['menu']['menuitems']['close']['value'] = 'Close'
        >>> root['menu']['menuitems']['close']['onclick'] = 'close();'
        >>> print json.dumps(root, sort_keys=True, indent=4, separators=(',', ': '))
        {
        "menu": {
        "id": "file",
        "menuitems": {
        "close": {
        "onclick": "close();",
        "value": "Close"
        },
        "new": {
        "onclick": "new();",
        "value": "New"
        },
        "open": {
        "onclick": "open();",
        "value": "Open"
        }
        },
        "value": "File"
        }
        }


        1.29 對象到唯一計數的映射

        代碼如下:

        >>> import itertools, collections
        >>> value_to_numeric_map = collections.defaultdict(itertools.count().next)
        >>> value_to_numeric_map['a']
        0
        >>> value_to_numeric_map['b']
        1
        >>> value_to_numeric_map['c']
        2
        >>> value_to_numeric_map['a']
        0
        >>> value_to_numeric_map['b']
        1


        1.30 最大和最小的幾個列表元素

        代碼如下:

        >>> a = [random.randint(0, 100) for __ in xrange(100)]
        >>> heapq.nsmallest(5, a)
        [3, 3, 5, 6, 8]
        >>> heapq.nlargest(5, a)
        [100, 100, 99, 98, 98]


        1.31 兩個列表的笛卡爾積

        代碼如下:

        >>> for p in itertools.product([1, 2, 3], [4, 5]):
        (1, 4)
        (1, 5)
        (2, 4)
        (2, 5)
        (3, 4)
        (3, 5)
        >>> for p in itertools.product([0, 1], repeat=4):
        ... print ''.join(str(x) for x in p)
        ...
        0000
        0001
        0010
        0011
        0100
        0101
        0110
        0111
        1000
        1001
        1010
        1011
        1100
        1101
        1110
        1111


        1.32 列表組合和列表元素替代組合

        代碼如下:

        >>> for c in itertools.combinations([1, 2, 3, 4, 5], 3):
        ... print ''.join(str(x) for x in c)
        ...
        123
        124
        125
        134
        135
        145
        234
        235
        245
        345
        >>> for c in itertools.combinations_with_replacement([1, 2, 3], 2):
        ... print ''.join(str(x) for x in c)
        ...
        11
        12
        13
        22
        23
        33


        1.33 列表元素排列組合

        代碼如下:

        >>> for p in itertools.permutations([1, 2, 3, 4]):
        ... print ''.join(str(x) for x in p)
        ...
        1234
        1243
        1324
        1342
        1423
        1432
        2134
        2143
        2314
        2341
        2413
        2431
        3124
        3142
        3214
        3241
        3412
        3421
        4123
        4132
        4213
        4231
        4312
        4321


        1.34 可鏈接迭代器

        代碼如下:

        >>> a = [1, 2, 3, 4]
        >>> for p in itertools.chain(itertools.combinations(a, 2), itertools.combinations(a, 3)):
        ... print p
        ...
        (1, 2)
        (1, 3)
        (1, 4)
        (2, 3)
        (2, 4)
        (3, 4)
        (1, 2, 3)
        (1, 2, 4)
        (1, 3, 4)
        (2, 3, 4)
        >>> for subset in itertools.chain.from_iterable(itertools.combinations(a, n) for n in range(len(a) + 1))
        ... print subset
        ...
        ()
        (1,)
        (2,)
        (3,)
        (4,)
        (1, 2)
        (1, 3)
        (1, 4)
        (2, 3)
        (2, 4)
        (3, 4)
        (1, 2, 3)
        (1, 2, 4)
        (1, 3, 4)
        (2, 3, 4)
        (1, 2, 3, 4)


        1.35 根據文件指定列類聚

        代碼如下:

        >>> import itertools
        >>> with open('contactlenses.csv', 'r') as infile:
        ... data = [line.strip().split(',') for line in infile]
        ...
        >>> data = data[1:]
        >>> def print_data(rows):
        ... print '\n'.join('\t'.join('{: <16}'.format(s) for s in row) for row in rows)
        ...

        >>> print_data(data)
        young myope no reduced none
        young myope no normal soft
        young myope yes reduced none
        young myope yes normal hard
        young hypermetrope no reduced none
        young hypermetrope no normal soft
        young hypermetrope yes reduced none
        young hypermetrope yes normal hard
        pre-presbyopic myope no reduced none
        pre-presbyopic myope no normal soft
        pre-presbyopic myope yes reduced none
        pre-presbyopic myope yes normal hard
        pre-presbyopic hypermetrope no reduced none
        pre-presbyopic hypermetrope no normal soft
        pre-presbyopic hypermetrope yes reduced none
        pre-presbyopic hypermetrope yes normal none
        presbyopic myope no reduced none
        presbyopic myope no normal none
        presbyopic myope yes reduced none
        presbyopic myope yes normal hard
        presbyopic hypermetrope no reduced none
        presbyopic hypermetrope no normal soft
        presbyopic hypermetrope yes reduced none
        presbyopic hypermetrope yes normal none

        >>> data.sort(key=lambda r: r[-1])
        >>> for value, group in itertools.groupby(data, lambda r: r[-1]):
        ... print '-----------'
        ... print 'Group: ' + value
        ... print_data(group)
        ...
        -----------
        Group: hard
        young myope yes normal hard
        young hypermetrope yes normal hard
        pre-presbyopic myope yes normal hard
        presbyopic myope yes normal hard
        -----------
        Group: none
        young myope no reduced none
        young myope yes reduced none
        young hypermetrope no reduced none
        young hypermetrope yes reduced none
        pre-presbyopic myope no reduced none
        pre-presbyopic myope yes reduced none
        pre-presbyopic hypermetrope no reduced none
        pre-presbyopic hypermetrope yes reduced none
        pre-presbyopic hypermetrope yes normal none
        presbyopic myope no reduced none
        presbyopic myope no normal none
        presbyopic myope yes reduced none
        presbyopic hypermetrope no reduced none
        presbyopic hypermetrope yes reduced none
        presbyopic hypermetrope yes normal none
        -----------
        Group: soft
        young myope no normal soft
        young hypermetrope no normal soft
        pre-presbyopic myope no normal soft
        pre-presbyopic hypermetrope no normal soft
        presbyopic hypermetrope no normal soft

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        35個Python編程小技巧

        35個Python編程小技巧:這篇博客其實就是這個集合整理后一部分的公開亮相。如果你已經是個python大牛,那么基本上你應該知道這里面的大多數用法了,但我想你應該也能發現一些你不知道的新技巧。而如果你之前是一個c,c++,java的程序員,同時在學習python,或者干脆就是一個剛剛學習編
        推薦度:
        標簽: 小技巧 技巧 3.5
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 国产青草视频免费观看97 | 亚洲免费视频播放| 亚洲午夜无码久久久久| 免费无码国产在线观国内自拍中文字幕| 免费人成视频在线| 在线亚洲午夜片AV大片| 天天天欲色欲色WWW免费| 亚洲综合一区无码精品| 噜噜嘿在线视频免费观看| 欧美亚洲国产SUV| 国产成人精品免费视频大全五级 | 亚洲综合精品一二三区在线| 今天免费中文字幕视频| 亚洲国产精品线在线观看| 亚洲中文字幕无码久久2017| 人妻仑乱A级毛片免费看| 国产亚洲精午夜久久久久久| 久久久久国色AV免费观看| 图图资源网亚洲综合网站| 亚洲精品视频免费在线观看| 成人亚洲国产va天堂| 午夜无遮挡羞羞漫画免费| 日韩精品视频在线观看免费| 亚洲国产精品一区二区久久hs| 最近免费中文字幕mv在线电影| 亚洲人成免费网站| 国产免费av片在线播放| 精品一区二区三区免费视频| 亚洲伊人久久大香线蕉苏妲己| 毛片高清视频在线看免费观看| 狠狠综合亚洲综合亚洲色| 亚洲高清国产AV拍精品青青草原| 91嫩草免费国产永久入口| 亚洲av无码专区国产不乱码| 最新亚洲成av人免费看| 色se01短视频永久免费| 理论秋霞在线看免费| 91嫩草私人成人亚洲影院| 国产精品二区三区免费播放心| 在线毛片片免费观看| 亚洲欧美成人综合久久久|