让python编程更加丝滑的一些小技巧

翻译自10 Smooth Python Tricks For Python Gods

10个python编程的小技巧

  即使python语法十分简单以至每个人都可以学习,然而掌握python的程度却因人而异——python容易学习却难以精通。在python中,通常可以通过不同方法来完成同一任务,然而犯错却十分容易,此外由于你不知道python标准库已经实现了某些功能而自己造轮子——浪费时间与精力。
  令人烦恼的是python标准库太过庞大,这是因为python的生态巨大到令人生畏。python模块已经超过2^15 字节,本文将介绍python标准库的几个技巧。

字符串逆序

  直接使用循环可能是最基本的方法,但这种方法是笨重而繁琐的。在python中,直接使用切片操作来达到逆序的效果,示例如下:
a = "!dlrow olleH"
print(a) # !dlrow olleH
print(a[::-1]) # Hello world!

将序列内容赋值给多个变量

  在大部分编程语言中,想要将一个序列的内容赋值给对应的一套变量,通常需要使用循环来迭代或者使用索引。然而在python中,我们可以使用更加炫酷和迅速的方式来完成这一操作,只需要将变量设为与序列内容长度相同的一套变量即可:
aArray = [1, 2, 3, 4]
one, two, three, four = aArray
print(three) # 3

itertools

  如果想要精通python,熟悉itertools模块是十分必要的。itertools模块允许你不断解决有关迭代的问题。使用该模块不仅能让你容易的写出复杂的循环,还可以使代码简单明了,编程过程也将更加愉快。本文将介绍一个简单的例子(将可迭代对象序列化为一维列表):
c = [[1, 2], [3, 4], [5, 6]]
# Let's convert this matrix to a 1 dimensional list.
import itertools as it
newlist = list(it.chain.from_iterable(c))

自适应Unpacking

  迭代式地Unpacking费时费力,python有许多十分cool的方式来unpack列表。例如使用*, 这个符号能将未指定的值赋值到一个新的列表:
a, *b, c = [1, 2, 3, 4, 5, 6]
print(a, b, c, sep='\n')
# 1
# [2, 3, 4]
# 5

Enumerate

  熟悉enumerate是很有必要的,它能让你同时使用列表的索引和索引对应值。当使用数组而非复杂的数据结构时,该函数是非常有用的:

for i,w in enumerate(array):
 print(i, w)

aList = [5, 10, 15]
for i,w in enumerate(aList):
    print(i,w)
# 0 5
# 1 10
# 2 15

Slice类

  python的切片操作简洁而强大,除了使用切片操作符":"之外,还可以使用slice类。在线性代数相关的计算中,slice是十分有用的:

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

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

对列表的相邻元素进行分组

  当然可以在for循环中容易地对列表的相邻元素进行分组,尤其是使用zip()时,但这当然不是最好的处理方式。
  为了使事情变得更加轻松和快捷,我们可以使用zip编写一个lambda表达式,该表达式将对我们的相邻列表进行分组,如下所示:
a = [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)

使用next()来迭代生成器

g = (x ** 2 for x in range(4, 10))
print(next(g)) # 16
print(next(g)) # 25

Counter

  标准库中另一个很棒的模块是collections,本文想介绍的是collections中的Counter。使用Counter,我们可以轻松获得列表的计数。这对于获取数据中的值总数,获取数据的空计数以及查看数据的唯一值很有用。此时你可能会有疑问:
  为什么不直接使用pandas?
  使用pandas当然可以完成此类操作,然而你需要额外安装pandas库,此外Counter包含许多pandas series不具有的功能。
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)]

Dequeue

  collection模块中的dequeue具有一些十分有趣的特征,尝试下面几行代码来使用这种数据结构:
import collections
Q = collections.deque() 
Q.append(1) 
Q.appendleft(2) 
Q.extend([3, 4]) 
Q.extendleft([5, 6]) 
Q.pop()
Q.popleft()
Q.rotate(3) 
Q.rotate(-3)
print(Q)

结语

  这些是一些十分有用的Python技巧,这些技巧往往用途广泛且有用。python标准库是十分值得大家探索和学习的!

猜你喜欢

转载自blog.csdn.net/qq_34769162/article/details/108877612
今日推荐