切片
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# 切片
L = ['Mick', 'Tom', 'Sarah', 'Jack']
print(L[0:3]) # 从索引0开始取,直到索引3为止
# 第一个索引是0,还可以省略
print(L[:3])
# 取倒数元素
print(L[-2:])
r = list(range(100))
print(r[:10])
print(r[-10:])
print(r[10:20])
print(r[:10:2]) # 前10个数,每两个取1个
print(r[::5]) # 所有数,每5个取1个
print(r[:]) # 复制一个list
# tuple元祖切片操作
print((1,2,43,2,3,4)[:3])
# 字符串切片操作.Python没有针对字符串的截取函数,只需要切片操作即可
print('abcdefgh'[:3])
迭代
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from collections import Iterable
# 迭代:只要是可迭代对象,无论有无下标,都可以迭代
# 字典迭代
d = {'a':1, 'b':2, 'c':3}
# 默认情况下,dict迭代的是key
for key in d:
print(key)
# 迭代value
for value in d.values():
print(value)
# 迭代key和value
for k,v in d.items():
print(k,v)
# 字符串迭代
for ch in 'ABVC':
print(ch)
# 判断一个对象是否是可迭代对象
'''
1. 通过collections模块的Iterable
'''
print(isinstance('abc',Iterable))
# 下标循环 enumerate函数,可以把list变成索引-元素对
for i,value in enumerate(['a','b','c']):
print(i,value)
for x,y in [(1,2),(3,4),(5,6)]:
print(x,y)
列表生成式
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import os
# 列表生成式:list comprehensions
# 生成[1*1, 2*2, 3*3, ... ,10x10]
a = [x * x for x in range(1,11)]
print(a)
# for 循环后还可以加上if判断,这样就可以筛选出仅偶数的平方
b = [x * x for x in range(1,11) if x % 2 == 0]
print(b)
# 两层循环,生成全排列
c = [m + n for m in 'ABC' for n in 'XYZ']
print(c)
# 列出当前目录下的所有文件和目录名
d = [x for x in os.listdir('.')]
print(d)
# 使用两个变量来生成list
e = {'x':'A', 'y':'B', 'z':'C'}
f = [k + '=' + v for k,v in e.items()]
print(f)
# 将list中所有的字符串变成小写
g = ['Hello', 'World', 'IBM', 'Apple']
h = [s.lower() for s in g]
print(h)
生成器
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# 生成器 generator:一边循环一边计算的机制
'''
1. 与列表生成式的区别:将[]改成()
2. 通过next()函数获得generator下一个返回值
'''
a = (x * x for x in range(10))
for b in a:
print(b)
# 如果一个函数定义中包含了yield关键字,就是一个generator函数
'''
1. 在每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行
'''
def fib(max):
n,a,b = 0,0,1
while n < max :
yield b
a, b = b, a + b
n = n + 1
return 'done'
c = fib(10)
for d in c :
print(d)
# 用for循环调用generator时,发现拿不到generator的return语句的返回值
# 要拿到返回值,必须捕获StopIteration错误,返回值包含在StopIteration的value中
d = fib(12)
while True:
try:
x = next(d)
print('d:',x)
except StopIteration as e:
print('Generator return value:',e.value)
break
迭代器
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# 迭代器
'''
可迭代对象:Iterable
1. 用isinstance()判断一个对象是否是Iterable对象
2. list, tuple, dict, set, str等
迭代器:Iterator
1. 可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator
2. 可以使用isinstance()判断一个对象是否是Iterator对象
3. 生成器
4. 迭代器对象表示的是一种数据流,可以把这个流看做是一个有序序列,却不知道序列长度
5. 迭代器的计算是惰性的
6. 可以表示一个无限大的数据流,例如全体自然数
'''
from collections import Iterator
# 判断是否是迭代器
print(isinstance((x for x in range(10)),Iterator))
# 将可迭代对象转换成迭代器,用iter()函数
print(isinstance(iter('abc'),Iterator))
参考
- 廖雪峰的Python教程
网友评论