国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

30個有關Python的小技巧

2019-11-14 16:54:36
字體:
來源:轉載
供稿:網友

從我開始學習python的時候,我就開始自己總結一個python小技巧的集合。后來當我什么時候在Stack Overflow
或者在某個開源軟件里看到一段很酷代碼的時候,我就很驚訝:原來還能這么做!,當時我會努力的自己嘗試一下這段代碼,直到我懂了它的整體思路以后,我就把這段代碼加到我的集合里。這篇博客其實就是這個集合整理后一部分的公開亮相。如果你已經是個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]>>> a1>>> b2>>> c3>>> d4

  

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]>>> a1>>> b[2, 3, 4]>>> c5

  

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)>>> LASTTHREEslice(-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)>>> pPoint(x=1.0, y=2.0)>>> p.x1.0>>> p.y2.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 + qPoint(x=3.0, y=5.0)

 

1.21 操作集合

 
>>> A = {1, 2, 3, 3}>>> Aset([1, 2, 3])>>> B = {3, 4, 5, 6, 7}>>> Bset([3, 4, 5, 6, 7])>>> A | Bset([1, 2, 3, 4, 5, 6, 7])>>> A & Bset([3])>>> A - Bset([1, 2])>>> B - Aset([4, 5, 6, 7])>>> A ^ Bset([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])>>> ACounter({2: 2, 1: 1})>>> BCounter({2: 2, 3: 1})>>> A | BCounter({2: 2, 1: 1, 3: 1})>>> A & BCounter({2: 2})>>> A + BCounter({2: 4, 1: 1, 3: 1})>>> A - BCounter({1: 1})>>> B - ACounter({3: 1})

  

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

 
>>> A = collections.Counter([1, 1, 2, 2, 3, 3, 3, 3, 4, 5, 6, 7])>>> ACounter({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])>>> Qdeque([6, 5, 2, 1, 3, 4])>>> Q.pop()4>>> Q.popleft()6>>> Qdeque([5, 2, 1, 3])>>> Q.rotate(3)>>> Qdeque([2, 1, 3, 5])>>> Q.rotate(-3)>>> Qdeque([5, 2, 1, 3])

  

1.25 有最大長度的雙端隊列

>>> last_three = collections.deque(maxlen=3)>>> for i in xrange(10):...     last_three.append(i)...     

  

1.26 可排序詞典

1.27 默認詞典

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

1.29 對象到唯一計數的映射

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

1.31 兩個列表的笛卡爾積

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

1.33 列表元素排列組合

1.34 可鏈接迭代器

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                 noneyoung               myope                   no                      normal                  softyoung               myope                   yes                     reduced                 noneyoung               myope                   yes                     normal                  hardyoung               hypermetrope            no                      reduced                 noneyoung               hypermetrope            no                      normal                  softyoung               hypermetrope            yes                     reduced                 noneyoung               hypermetrope            yes                     normal                  hardpre-presbyopic      myope                   no                      reduced                 nonepre-presbyopic      myope                   no                      normal                  softpre-presbyopic      myope                   yes                     reduced                 nonepre-presbyopic      myope                   yes                     normal                  hardpre-presbyopic      hypermetrope            no                      reduced                 nonepre-presbyopic      hypermetrope            no                      normal                  softpre-presbyopic      hypermetrope            yes                     reduced                 nonepre-presbyopic      hypermetrope            yes                     normal                  nonepresbyopic          myope                   no                      reduced                 nonepresbyopic          myope                   no                      normal                  nonepresbyopic          myope                   yes                     reduced                 nonepresbyopic          myope                   yes                     normal                  hardpresbyopic          hypermetrope            no                      reduced                 nonepresbyopic          hypermetrope            no                      normal                  softpresbyopic          hypermetrope            yes                     reduced                 nonepresbyopic          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: hardyoung               myope                   yes                     normal                  hardyoung               hypermetrope            yes                     normal                  hardpre-presbyopic      myope                   yes                     normal                  hardpresbyopic          myope                   yes                     normal                  hard-----------Group: noneyoung               myope                   no                      reduced                 noneyoung               myope                   yes                     reduced                 noneyoung               hypermetrope            no                      reduced                 noneyoung               hypermetrope            yes                     reduced                 nonepre-presbyopic      myope                   no                      reduced                 nonepre-presbyopic      myope                   yes                     reduced                 nonepre-presbyopic      hypermetrope            no                      reduced                 nonepre-presbyopic      hypermetrope            yes                     reduced                 nonepre-presbyopic      hypermetrope            yes                     normal                  nonepresbyopic          myope                   no                      reduced                 nonepresbyopic          myope                   no                      normal                  nonepresbyopic          myope                   yes                     reduced                 nonepresbyopic          hypermetrope            no                      reduced                 nonepresbyopic          hypermetrope            yes                     reduced                 nonepresbyopic          hypermetrope            yes                     normal                  none-----------Group: softyoung               myope                   no                      normal                  softyoung               hypermetrope            no                      normal                  softpre-presbyopic      myope                   no                      normal                  softpre-presbyopic      hypermetrope            no                      normal                  softpresbyopic          hypermetrope            no                      normal                  soft

  


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 湟中县| 安丘市| 大理市| 内丘县| 大渡口区| 博白县| 饶阳县| 剑川县| 泰安市| 巴里| 正镶白旗| 渭南市| 定日县| 台中县| 保亭| 西乌| 磴口县| 封丘县| 郧西县| 长治县| 保靖县| 土默特左旗| 连云港市| 临泽县| 齐河县| 武威市| 红桥区| 安化县| 吴桥县| 吉林省| 潢川县| 岳普湖县| 绿春县| 宜兰市| 吉木萨尔县| 江孜县| 兴海县| 岑溪市| 云阳县| 衡阳市| 礼泉县|