Python高级特性:
切片:取一个list或tuple的部分元素
l = [1,2,3,4,5,6,7,8,9,10]
print(l[:3]) # 输出从0-2,三个元素
>>>[1,2,3]
print(l[-1]) #取倒数第一个元素
>>>[10]
print(l[-2:]) #取倒数两个元素
>>>[9,10]
print(l[:6:2]) #取前六个元素,每两个选一个
>>>[1,3,5]
print(l[::3]) #取全部元素,每三个选一个
>>>[1,4,7,10]
print(l[:]) #可以原样复制一个list
>>>[1,2,3,4,5,6,7,8,9,10]
迭代:通过for循环来遍历这个list或tuple,这种遍历叫做迭代
如果要对list或者tuple实现类似java那样的下标循环,可以使用Python内置的enumerate函数,可以把一个list编程索引-元素对:
for i,vaule in enumerate(['A','B','C']):
print(1,vaule)
>>> 0 A
>>> 1 B
>>> 2 C
列表生成器:
l = [x*x for x in range(1,11)]
print(l)
>>> [1,4,9,16,25,36,49,64,81,100]
l = [x*x for x in range(1,11) if x%2 == 0]
print(l)
>>> [4,16,36,64,100]
l = [m + n for m in 'ABC' for n in 'XYZ']
print(l)
>>> ['AX','AY','AZ','BX','BY','BZ','CX','CY','CZ']
#列出当前目录下所有文件和目录名
import os #导入os模块
l = [d for d in os.listdir('.')] #os.listdir 可以列出所有文件名和目录
#如果要在列表生成式中使用if...else模式(不是只有if判断时):
l = [x if x%2 == 0 else -x for x in range(1,11)]
print(l)
[-1,2,-3,4,-5,6,-7,8,-9,10]
生成器:generator,一边循环一边计算的机制,最简单的方式是把列表生成器的[ ]换成( ),可解决列表生成器,创建列表过大导致的资源浪费。
g = (x*x for x in range(10))
print(g)
#返回的是generator的内存地址。
#如果要打印内容,使用next()
print(next(g))
#吐过一个函数定义中包含yield关键字,那么这个函数就是不再是一个普通函数,而是一个generator生成器
def test(max):
n,a,b = 0,0,1
while n<max:
yield b
a,b = b,a+b
n = n + 1
return 'end'
#函数是顺序执行,遇到return语句或者最后一行函数语句就返回。而变成generator的函数,在每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行,而不是从头执行。
#一般使用for循环来迭代
#如果要拿到最后的返回值,可修改为
g = test(6)
while True:
try:
x = next(g)
print('g:',x)
except StopIteration as e:
print('Generator trturn value:',e.value)
break
#最后会输出 Generator trturn value: end
迭代器:可以直接作用于for循环的对象统称为迭代器。