30个Python技巧(1)

前端之家收集整理的这篇文章主要介绍了30个Python技巧(1)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
对python这个高级语言感兴趣的小伙伴,下面一起跟随编程之家 jb51.cc的小编两巴掌来看看吧!

从我开始学习Python时我就决定维护一个经常使用的“窍门”列表。不论何时当我看到一段让我觉得“酷,这样也行!”的代码时(在一个例子中、在StackOverflow、在开源码软件中,等等),我会尝试它直到理解它,然后把它添加到列表中。这篇文章是清理过列表的一部分。如果你是一个有经验的Python程序员,尽管你可能已经知道一些,但你仍能发现一些你不知道的。如果你是一个正在学习Python的C、C++或Java程序员,或者刚开始学习编程,那么你会像我一样发现它们中的很多非常有用。

每个窍门或语言特性只能通过实例来验证,无需过多解释。虽然我已尽力使例子清晰,但它们中的一些仍会看起来有些复杂,这取决于你的熟悉程度。所以如果看过例子后还不清楚的话,标题能够提供足够的信息让你通过Google获取详细的内容

列表按难度排序,常用的语言特征和技巧放在前面。

1.1 分拆

>>> a,b,c = 1,2,3

>>> a,c

(1,3)

>>> a,c = [1,3]

>>> a,c = (2 * i + 1 for i in range(3))

>>> a,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 拓展分拆 (Python 3下适用)

>>> a,*b,4,5]

>>> a

1

>>> b

[2,4]

>>> c

5

1.4 负索引

>>> a = [0,1,5,6,7,8,9,10]

>>> a[-1]

10

>>> a[-3]

8

1.5 列表切片 (a[start:end])

>>> a = [0,10]

>>> a[2:8]

[2,7]

1.6 使用负索引的列表切片

>>> a = [0,10]

>>> a[-4:-2]

[7,8]

1.7 带步进值的列表切片 (a[start:end:step])

>>> a = [0,10]

>>> a[::2]

[0,10]

>>> a[::3]

[0,9]

>>> a[2:8:2]

[2,6]

1.8 负步进值得列表切片

>>> a = [0,10]

>>> a[::-1]

[10,0]

>>> a[::-2]

[10,0]

1.9 列表切片赋值

>>> a = [1,5]

>>> a[2:3] = [0,0]

>>> a

[1,5]

>>> a[1:1] = [8,9]

>>> a

[1,5]

>>> a[1:-1] = []

>>> a

[1,5]

1.10 命名切片 (slice(start,end,step))

>>> a = [0,5]

>>> LASTTHREE = slice(-3,None)

>>> LASTTHREE

slice(-3,None,None)

>>> a[LASTTHREE]

[3,5]

1.11 zip打包解包列表和倍数

>>> a = [1,3]

>>> b = ['a','b','c']

>>> z = zip(a,b)

>>> z

[(1,'a'),'b'),(3,'c')]

>>> zip(*z)

[(1,('a','c')]

1.12 使用zip合并相邻的列表项

>>> a = [1,6]

>>> zip(*([iter(a)] * 2))

[(1,2),4),(5,6)]

 

>>> group_adjacent = lambda a,k: zip(*([iter(a)] * k))

>>> group_adjacent(a,3)

[(1,(4,6)]

>>> group_adjacent(a,2)

[(1,1)

[(1,),(6,)]

 

>>> zip(a[::2],a[1::2])

[(1,6)]

 

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

[(1,k: zip(*(a[i::k] for i in range(k)))

>>> group_adjacent(a,)]

1.13 使用zip和iterators生成滑动窗口 (n -grams)

>>> from itertools import islice

>>> def n_grams(a,n):

... z = (islice(a,i,None) for i in range(n))

... return zip(*z)

...

>>> a = [1,6]

>>> n_grams(a,5),6)]

>>> n_grams(a,4)

[(1,6)]

1.14 使用zip反转字典

>>> m = {'a': 1,'b': 2,'c': 3,'d': 4}

>>> m.items()

[('a',1),('c',('b',('d',4)]

>>> zip(m.values(),m.keys())

[(1,'c'),'d')]

>>> mi = dict(zip(m.values(),m.keys()))

>>> mi

{1: 'a',2: 'b',3: 'c',4: 'd'}

猜你在找的Python相关文章