1-切片
切片用于提取一组数据list、tuple等中的一部分,个人感觉和matlab语法很相似,
例如
l[0:3] #表示取l[0],l[1],l[2]
l[:3] #与上面等价,初始或者结束为首尾位置,则可以缩写
l[-2:0] #表示取倒数第一个l[-1]和倒数第二个l[-2]
l[-2:] #与上面等价
l[0:5:2]#表示以2个2个取,得到l[0],l[2],l[4]
l[::2] #表示2个2个取整个数据集
切片也同样适用于字符串,
'ABCDEFG'[0:2] #结果取AB
2-迭代
Python可以对任何可迭代对象进行迭代,迭代使用for x in y的形式进行迭代。
#d = {'a'='1','b'='2'}
for key in d: #遍历d的key,输出
print(key)
for value in d.values() #用于迭代dict的value
for x,y in d.items() #用于同时迭代dict的key 和value
如何判断是否为可迭代对象呢?
引入函数
>>> from collections import Iterable
>>> isinstance('abc', Iterable) # str是否可迭代
True
>>> isinstance([1,2,3], Iterable) # list是否可迭代
True
>>> isinstance(123, Iterable) # 整数是否可迭代
False
3-列表生成式
最简单的列表生成
[x + 1 for x in range(1,5)]
[2,3,4,5]
增加条件的列表生成
[x + 1 for x in range(1,5) if x%2 ==0]
[3,5]
双层列表生成
[x + y for x in 'ABC' for y in '123']
['A1','A2','A3','B1','B2','B3','C1''C2','C3']
简单应用,例如把list里面的所有字符串的第一个字母变成小写
m = ['He','She']
[l[0].lower() + l[1:] for l in m] #输出['he','she']
4-生成器(generator)
利用列表生成式,我们可以一次性生成许多数据,如果我们只需要使用其中一部分,进行动态的生成,不用一次性占用很多内存,循环进行到哪里,就计算出下一个值,就可以使用生成器,生成器的使用有两种方法,
第一种,使用列表生成的generator:
>>>g = (x+1 for x in range(0,4)) #将[]变成()
>>>g
#不会输出,因为这个时候g是一个generator,还未开始动态生成
>>>g = (x+1 for x in range(0,4))
>>>for value in g:
print(value)
1
2
3
4
第二种针对无法使用列表生成式写出的复杂过程,可以使用函数进行generator,与一般函数不同的是,一般函数执行函数内部语句直到执行到return就退出函数体,generator的函数使用yield表示生成一次,执行到第一个yield时候就出该值,然后从这个位置开始继续执行下去,执行到最后一句语句或者return的时候就退出函数体。
def tri(n):
l = [1]
while n > 0:
n =n - 1
yield l
l = [l[x] + l[x+1] for x in range(len(l)-1)]
l.insert(0,1)
l.append(1)
for x in tri(4):
print(x)
#结果
#[1]
#[1,1]
#[1,2,1]
#[1,3,3,1]
上述两种方法都可以使用next()函数进行不断求得下一个数值,
Tips
使用生成器生成的序列是一种惰性序列,他只在你需要的范围内在需要的时候生成,并且可以是一个无限序列,