<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
        主站蜘蛛池模板: 国产亚洲福利精品一区二区| 久久精品国产亚洲AV麻豆王友容| 亚洲欧洲视频在线观看| 久久精品成人免费观看| 亚洲AV无码一区二区乱孑伦AS | 国产精品99精品久久免费| 亚洲精品无码高潮喷水在线| 三年片免费观看大全国语| 亚洲精品tv久久久久久久久| 大地影院MV在线观看视频免费 | 两性色午夜免费视频| 人人狠狠综合久久亚洲88| 日本一区二区免费看| 亚洲毛片无码专区亚洲乱| 国产1024精品视频专区免费| 久久er国产精品免费观看8| 久久久久亚洲精品中文字幕| 亚洲综合一区无码精品| 成年女人午夜毛片免费视频| 亚洲av永久无码精品秋霞电影秋| 亚洲AⅤ无码一区二区三区在线| 二级毛片免费观看全程| 亚洲AV无码码潮喷在线观看 | 一级特黄录像免费播放肥| 亚洲国产另类久久久精品黑人| 国产精品区免费视频| 97se亚洲国产综合自在线| 国产91在线免费| 丝袜捆绑调教视频免费区| 久久久久亚洲AV无码麻豆| 在线不卡免费视频| 国产日韩久久免费影院| 精品日韩亚洲AV无码| 青青草国产免费久久久下载| 中文字幕av无码不卡免费| 亚洲精品人成电影网| 免费一级毛片正在播放| 99久热只有精品视频免费看| 亚洲a∨国产av综合av下载 | 三年片免费观看大全国语| 亚洲乱码日产精品BD在线观看|