在Python中,代码不是越多越好,而是越少越好。代码不是越复杂越好,而是越简单越好。
基于这一思想,我们来介绍Python中非常有用的高级特性,1行代码能实现的功能,决不写5行代码。请始终牢记,代码越少,开发效率越高。
切片
举个例子我们需要遍历一个list或者tuple,或者取出某个或者某些元素,如下:
L = ['A', 'B', 'C', 'D']
for s in L:
print(s)
print(L[1], L[3])
输出就先不打印了。
其实问题也很明显,要遍历一下要写两行代码!就很烦。有没有简单方法呢?
那就是使用切片方法。
print(L[1:3]) #打印1-3位置 不包括3号
print(L[:3]) #打印0-3位置 0可以默认不写
print(L[-2:]) #负号表示从尾往前 -1为最后一个元素
print(L[-2:-1])
# 查看打印
['B', 'C']
['A', 'B', 'C']
['C', 'D']
['C']
L[1:3]表示,从索引1开始取,直到索引3为止,但不包括索引3。即索引1,2,正好是2个元素。
接下来我们创建一个100个元素的数列来测试一下:
L = list(range(100))
print(L[:10:2]) #前10个数 每2个数字取1个打印
print(L[::8]) #0-100 每8个取1个
print(L[:]) #默认是全部打印
print([1,2,3,4,5][::3]) #这种形式也是可以的
print('ABCDEFG'[2:6:2]) #从2-6号位置 每2个取1个
#打印结果
[0, 2, 4, 6, 8]
[0, 8, 16, 24, 32, 40, 48, 56, 64, 72, 80, 88, 96]
[0, 1, 2, 3 ..., 100]
[1, 4]
CE
在很多编程语言中,针对字符串提供了很多各种截取函数(例如,substring),其实目的就是对字符串切片。Python没有针对字符串的截取函数,只需要切片一个操作就可以完成,非常简单。
迭代
在Python中,迭代是通过for … in来完成的。很常见
很多类型都可以迭代比如,list,tuple,dict,字符串。
但是要注意的是,默认情况下,dict迭代的是key。如果要迭代value,可以用for value in d.values(),如果要同时迭代key和value,可以用for k, v in d.items()。
d = {'A':1, 'B':2, 'C':3}
for s in d: #默认迭代keys
print(s)
for s in d.values(): #迭代values
print(s)
#打印结果省略
for s in d.items():
print(s)
#迭代结果
('A', 1)
('B', 2)
('C', 3)
但是怎么判断一个对象是否可以使用迭代呢,就是使用isinstance(),通过collections模块的Iterable类型判断。
from collections import Iterable
print(isinstance([1,2,4], Iterable))
print(isinstance('abc', Iterable))
#打印结果
True
True
假如对一个二维list遍历呢?
for x,y in [[1,2],[3,4],[5,6]]:
print(x,y)
#打印结果
1 2
3 4
5 6