前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python 10 个极简用法,第五期

Python 10 个极简用法,第五期

作者头像
double
发布2020-06-22 16:55:43
4630
发布2020-06-22 16:55:43
举报
文章被收录于专栏:算法channel算法channel

今天带来 Python 10 个极简用法,第五期。

前四期在这里:

Python 10 个习惯用法,第一期

Python 10 个习惯用法,第二期

Python 10 个习惯用法,第三期

Python 10 个极简用法,第四期

1 文档字符串

说明函数的功能和用法,使用一对 """,用法如下:

代码语言:javascript
复制
def fdoc(x):
    """
    filter 函数使用演示
    
    找到列表x中所有奇数
    """
    odd = filter(lambda e: e % 2, x)
    for e in odd:  # 找到奇数
        print(e)

调用 fdoc:

代码语言:javascript
复制
In [2]: fdoc.__doc__
Out[2]: '\n    filter 函数使用演示\n    \n    找到列表x中所有奇数\n    '

2 函数标注

函数的参数被标注后,我们便能一眼识别出其类型和默认参数值等,还是以上面函数为例:

代码语言:javascript
复制
def fannotate(x:list):
    odd = filter(lambda e: e % 2, x)
    for e in odd:  # 找到奇数
        print(e)

调用 fannotate 函数:

代码语言:javascript
复制
In [4]: fannotate.__annotations__
Out[4]: {'x': list}

3 Python 实现栈

Python 无栈(stack)这一数据结构,但 Python列表实当栈用极为方便。

代码语言:javascript
复制
In [5]: x = [1,3,5]

In [6]: x.append(2) # push 操作

In [7]: x
Out[7]: [1, 3, 5, 2]

In [8]: x.pop() # pop 操作
Out[8]: 2

In [9]: x
Out[9]: [1, 3, 5]

以上所有操作时间复杂度为 O(1),不用写索引参数等。

4 Python 实现队列

如果说 Python 列表天性为栈而生,那么模拟队列操作就显得极为力不从心。因为队列操作发生两端,若在队头移除一个元素,代价极高。

为此,Python 添加一个相对高级的数据结构deque 来模拟队列,它位于collections模块中:

代码语言:javascript
复制
In [10]: from collections import deque

In [11]: queue = deque([1,3,5])

In [12]: queue.append(2) # 对尾添加元素

In [13]: queue
Out[13]: deque([1, 3, 5, 2])

In [14]: queue.popleft() #对头移除元素
Out[14]: 1

In [15]: queue
Out[15]: deque([3, 5, 2])

这样实现队列的后进后出、先进先出的特性,模拟了队列只能在两头添加、删除元素的特点。

5 嵌套列表生成式

列表生成式高效,同时也可嵌套,注意不要嵌套太深:

代码语言:javascript
复制
In [16]: a = [1,3,5]

In [17]: b = [2,4,6]

In [18]: [(i,j) for i in a for j in b]  # 嵌套,j 为内层
Out[18]: [(1, 2), (1, 4), (1, 6), (3, 2), (3, 4), (3, 6), (5, 2), (5, 4), (5, 6)]

i 为外层 for, j 为内层 for.

6 按索引删除

Python 的 list 无按索引删除元素的接口,不过使用del却能按照索引删除元素:

代码语言:javascript
复制
In [20]: a = [1,3,5,3]
In [21]: a.remove(3) #删除列表中第一个等于3的值
In [22]: a
Out[22]: [1, 5, 3]

In [23]: a = [1,3,5,3]
In [24]: del a[0] # 按照索引删除元素
In [25]: a
Out[25]: [3, 5, 3]

7 一键打包

Python 的简洁处处可见,等号右侧多个值,一个等号便可直接把它打包:

代码语言:javascript
复制
In [34]: t = 1,'zglg','shandong',(172,5000)

In [35]: t
Out[35]: (1, 'zglg', 'shandong', (172, 5000))

打包成元组,这个数据结构。

8 连串比较

Python 支持连串的不等式比较,使用方便:

代码语言:javascript
复制
In [36]: def comp_range(x,ran=[0,1]):
    ...:     return filter(lambda e: 0<e<1, x) # 连串 0<e<1

In [38]: list(comp_range([-2.,1.5,0.3,0.1]))
Out[38]: [0.3, 0.1]

9 打印点划线

Python 打印点划线,直接乘以个数即可,非常方便:

代码语言:javascript
复制
In [39]: print('-'*18)
------------------

10 打印平方及立方表

字符串的rjust 函数实现右对齐,如下打印平方及立方表,看到高度右对齐:

代码语言:javascript
复制
In [42]: for x in range(1,11):
    ...:     print(repr(x).rjust(3),repr(x**2).rjust(3),repr(x**3).rjust(3))
    ...:
  1   1   1
  2   4   8
  3   9  27
  4  16  64
  5  25 125
  6  36 216
  7  49 343
  8  64 512
  9  81 729
 10 100 1000

ljust 实现左对齐:

代码语言:javascript
复制
In [43]: for x in range(1,11):
    ...:     print(repr(x).ljust(3),repr(x**2).ljust(3),repr(x**3).ljust(3))
    ...:
    ...:
1   1   1
2   4   8
3   9   27
4   16  64
5   25  125
6   36  216
7   49  343
8   64  512
9   81  729
10  100 1000

以上就是本期 10 个 Python 极简用法,再次感受到 Python 的简洁之美。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-06-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员郭震zhenguo 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 文档字符串
  • 2 函数标注
  • 3 Python 实现栈
  • 4 Python 实现队列
  • 5 嵌套列表生成式
  • 6 按索引删除
  • 7 一键打包
  • 8 连串比较
  • 9 打印点划线
  • 10 打印平方及立方表
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档