切片
# 切片
mylist = [1,2,3,4,5,6,7,8,9,10,11]
#取前3个元素
mylist[0:3] # [1, 2, 3]
#从索引0开始取,还可以省略
mylist[:3] # [1, 2, 3]
#取倒数第一个元素
mylist[-1] # [11]
mylist[-2:] #[10, 11]
###字符串也可以使用切片
str = 'abcdefg'
str[:4] #abcd
迭代
###迭代 for...in..
###string
for ch in 'abcdef':
print(ch)
###list
for a in [1,2,3,4,5,6,7,8]:
print(a)
###tuple
myTuple = {'a':1,'b':2,'c':3,'d':4}
for key in myTuple:
print(key)
for k,v in myTuple.items():
print(k,':',v)
for value in myTuple.values():
print(value)
#判断一个类型是否支持迭代
isinstance('abc',Iterable) #判断字符串是否支持迭代 True
isinstance(123,Iterable) #判断整数是否支持迭代 False
列表生成式
#简单单层列表生成式
[x * x for x in range(1,11)] # [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
#添加判断
a = [x * x for x in range(1,11) if x % 2 == 0] # [4, 16, 36, 64, 100]
##两层循环
a = [m+n for m in 'abc' for n in 'XYZ'] #['aX', 'aY', 'aZ', 'bX', 'bY', 'bZ', 'cX', 'cY', 'cZ']
#把一个list中所有的字符串变成小写
L = ['Hello', 'World', 'IBM', 'Apple']
[s.lower() for s in L]
生成器 generator
generator:按照某种算法推算出来结果,是一种一边循环一遍计算的机制.
创建一个生成器
生成器和列表生成式的区别在最外层的[]和(),L是一个List, g是一个generator
#创建一个列表生成式
L = [x * x for x in range(10)]
#创建一个生成器
g = (x * x for x in range(10));
获取值 next()
next(g) // 0
next(g) // 1
next(g) // 4
next(g) // 9
generator也是一个可迭代的对象
使用generator 基本上都不会使用next(),而是使用for循环来迭代
for a in g:
print(a);
#0 1 4 9 16 25 36 49 64 81
generator还可以使用函数来实现
实现一个Fibonacci数列(1,1,2,3,5,8,13,21,34,...)
使用函数实现
def fib(max):
n,a,b = 0,0,1
while n < max:
print(b)
a,b = b,a+b
n = n + 1
创建生成器
def fibG(max):
n,a,b = 0, 0, 1
while n < max:
yield b
a,b = b,a+b
n = n+1
g1 = fibG(10)
for s1 in g1:
print(s1)
杨辉三角生成器
def triangles(max):
a = [1]
n = 0;
while n < max:
yield a;
b = a[:]
for i in range(len(b) - 1):
a[i + 1] = b[i] + b[i + 1]
a.append(1)
n = n+1
for s in triangles(5):
print(s)