Python不像想象那么简单!学会这些小技巧,离精通更进一步

开发 后端
Python标准库是一个巨大的野兽,它的生态系统绝对是庞大的。虽然Python模块可能有200万千兆字节,好在有一些使用技巧存在,我们可以用Python中与科学计算相关的标准库和包来学习。

本文转载自公众号“读芯术”(ID:AI_Discovery)。

Python看起来似乎是一种任何人都可以学习的简单语言,但实际上,学会不等于精通,Python的“后劲儿”超乎我们的想象,它容易入门却很难掌握。在Python中,一个通常有多种处理方法,但很容易出错的地方很多;或者仅仅因为不知道模块的存在,你就得重新创建标准库,这很浪费时间。

Python标准库是一个巨大的野兽,它的生态系统绝对是庞大的。虽然Python模块可能有200万千兆字节,好在有一些使用技巧存在,我们可以用Python中与科学计算相关的标准库和包来学习。

[[332288]]

1. 反转字符串

虽然看似是很基础的操作,但是用char循环来反转字符串可能会非常繁琐麻烦。幸运的是,Python包含了一个简单的内置操作来准确地执行这个任务,我们只需访问字符串上的索引::-1。

  1. a = "!dlrow olleH" 
  2. backward = a[::-1] 

Python不像想象那么简单!学会这些小技巧,离精通更进一步

2. Dims作为变量

在大多数语言中,为了将数组放入一组变量中需迭代循环值,或按位置访问暗点,如下所示:

  1. firstdim = array[1] 

然而,在Python中有一种更好更快的方法。为了将一列值改为变量,可以简单地将变量名设置为与数组长度相同的数组:

  1. array = [5, 10, 15, 20] 
  2. five, ten, fift, twent = array 

Python不像想象那么简单!学会这些小技巧,离精通更进一步

3. 生成器的next()迭代

在编程中的大多数正常情况下,可以访问一个索引,并使用计数器获取位置数字,计数器将只是一个值,添加到:

  1. array1 = [5, 10, 15, 20] 
  2. array2 = (x ** 2 for x in range(10)) 
  3. counter = 0for i in array1:# This code wouldn't work because 'i' is not in array2. 
  4.    # i = array2[i] 
  5.     i = array2[counter] 
  6. #    ^^^ This code would because we areaccessing the position of i 

我们也可以用next()代替它。Next使用一个迭代器,该迭代器将当前位置存储在内存中,并在后台迭代列表:

  1. g = (x ** 2 for x in range(10)) 
  2. print(next(g)) 
  3. print(next(g)) 

4. 智能拆包

迭代地解压值可能会非常耗费时力,Python中有几种不错的方法可以用来解压列表的方法。其中一个是*,它将填充未分配的值并将它们添加到变量名下的新列表中。

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

Python不像想象那么简单!学会这些小技巧,离精通更进一步

5. 列举

不了解列举那可不太行。列举可以获取列表中某些值的索引,在数据科学中使用数组而不是数据帧时,这就特别有用:

  1. for i,w in enumerate(array): 
  2.     print(i,w) 

Python不像想象那么简单!学会这些小技巧,离精通更进一步

6. 命名切片

Python中,分割列表非常简单,各式各样优秀工具都能做到。特别好的一点是,它还能够给列表命名,这对于Python中的线性代数特别有用:

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

Python不像想象那么简单!学会这些小技巧,离精通更进一步 

7. Itertools

如果深入学习Python,那你肯定要熟悉itertools。itertools是标准库中的一个模块,它可以不断地解决迭代问题。它不仅使编写复杂循环大幅度变容易,而且还使代码更简洁快速。有数百种Itertools的使用示例,来看看其中一个:

  1. c = [[1, 2], [3, 4], [5, 6]] 
  2. # Let's convert this matrix to a 1 dimensional list. 
  3. import itertools as it 
  4. newlist = list(it.chain.from_iterable(c)) 

8. 分组相邻列表

在for循环中,对相邻循环进行分组当然很容易,特别是使用zip(),但这肯定不是最好的方法。为了更轻松便捷地实现这一点,可以用zip编写一个lambda表达式,该表达式将对相邻列表进行分组,如下所示:

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

Python不像想象那么简单!学会这些小技巧,离精通更进一步

9. 计数器

集合也是模块中很好的标准库,这里向大家介绍的是集合中的计数器。使用计数器,可以轻松获得一个列表的计数。这对于获取数据中的值总数、数据的空计数,以及查看数据的唯一值非常有用。

“为什么不直接使用Pandas呢?”使用Pandas来实现这一点无疑会困难得多,而且这只是在部署算法时需要添加到虚拟环境中的另一个依赖项。另外,Python中的计数器类型有很多Pandas系列没有的特性,这使其在某些情况下更有用。

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

10. 出队

如下所示,出队能让代码非常整洁:

  1. import collections 
  2. Q = collections.deque() 
  3. Q.append(1) 
  4. Q.appendleft(2) 
  5. Q.extend([3, 4]) 
  6. Q.extendleft([5, 6]) 
  7. Q.pop() 
  8. Q.popleft() 
  9. Q.rotate(3) 
  10. Q.rotate(-3) 
  11. print(Q) 

Python不像想象那么简单!学会这些小技巧,离精通更进一步

这些是笔者一直爱用的Python技巧,都非常通用和实用,实践中总有机会能用到。Python的标准库函数工具箱变得越来越多样,还有很多笔者也没听说过的工具。学无止境,这多么令人兴奋! 

 

责任编辑:赵宁宁 来源: 今日头条
相关推荐

2010-03-15 09:40:19

Windows 8研发

2015-05-27 14:38:14

戴尔云计算

2020-09-22 10:49:12

大数据旅游技术

2009-03-31 11:12:59

万兆以太网

2021-04-27 11:20:20

机器学习骨科医疗

2014-11-28 13:37:30

DCN无线

2016-09-07 15:38:13

绿色数据中心能源消耗

2017-12-27 10:40:13

UnixLinux习惯

2023-04-12 16:12:09

2015-07-03 11:07:34

程序猿作法

2014-11-13 15:54:23

Imperva亚马逊

2021-01-29 17:57:32

存储

2022-07-27 22:15:20

HarmonyOS鸿蒙鸿蒙系统

2023-12-18 13:06:25

脑机接口AI

2011-09-16 11:38:34

AVGQQ电脑管家

2021-07-23 10:27:51

量子计算机芯片超算

2011-08-02 14:31:16

激光打印机用户体验
点赞
收藏

51CTO技术栈公众号