Python技巧二三事
使用 Python 作为研究仿真测试语言已经有一段时间了,慢慢的也积累了一些在科学计算中的技巧。
本文中讲持续记录实践中总结的经验,也包含了学科计算库(NumPy、SciPy)中的一些效率技巧与统计分析(Pandas)的高级使用方式。
值得注意的是:这里的技巧主要针对 Python3 以及 Python 2.7.0 以上版本,没有测试低版本的兼容性。
废话不多说,直接上干货,并持续更新。
单行迭代、循环、遍历
Python 是一种脚本语言,因此有一些语法糖可以提高编程效率。在科学计算中,数据迭代、遍历这种最常见的用法,内容简单,处理麻烦。而 python 存在一些办法可以让这些繁琐的代码语意化,大大的提高了编程效率,方便了维护与改良,传播。
假设我现在有一个数组:data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
。
初阶:简单遍历
对于需要遍历数组列表中每个元素,并做出相应处理的操作,单行遍历的语法糖效率更高,可读性更好,编码也更简单。下面的代码将要遍历原列表中的每个元素,对其乘以2并返回结果:new_data: [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
。
new_data = [each * 2 for each in data]
上面自然是文艺青年的用法,普通青年的用法如下:
new_data = list()
for each in data:
new_data.append(each * 2)
进阶:附带条件的操作
更多的时候我们需要对列表中的元素进行筛选,以生成新的列表。下面我们将对原列表中的奇数乘以3:
new_data = [odd * 3 for odd in data if odd % 2 != 0]
高阶:对多个列表的组合迭代
还有时候,一个结果需要在多个列表的互相配合下才能得出,这里主要使用了一些 Python 的内置函数: ==zip==、==enumerate== 等等。下面代码的作用是这样的:[4, 6, 8] = [0, 1, 2] + [4, 5, 6]
。
a = [0, 1, 2]
b = [4, 5, 6]
使用 zip 将两个数组联起来:
c = [xa + xb for (xa, xb) in zip(a, b)]
使用 enumerate 生成列表的序号:
c = [index + xb for (index, xb) in enumerate(b)]
普通青年写法:
c = list() for index in range(len(a)): c.append(a[index] + b[index])
条件赋值
很多情况下,对一个数据的赋值需要根据一些条件进行判断,简单的说就是:如果 ==怎么样== 就 ==如此== ; 否则就 ==那般== 。
初学者往往会这样写代码:
if [condition]:
a = 10
else:
a = 5
print("a is: %d" % a)
但是进阶的用户也许会尝试这样的代码:
a = 10 if [condition] else 5
print("a is: %d" % a)
同样的,条件赋值可以让你的代码有更高的执行效率也更好的可维护性。又需要的话可以尝试一下哦。