假装有标题 打卡2

python的特性:

#切片
d=['a',3,'ahng',2333]
for x in d[1:3]: #截取列表索引号为1,2的元素,不包含3,类似左闭右开[1,3)
    print(x)
for x in d[-3:-1]: #切片同样支持负号倒数取元素,此时为左开右闭
    print(x)
#迭代
#字典迭代举例
f={'a':97,'b':98,'c':99}
#迭代输出key
for x in f:
    print (x)
#迭代输出value
for x in f.values():
    print (x)
#列表生成式
#[表达式 for ... in ... if ...]
l=[x*x for x in range(1,10)]#创建1到9的平方的数列
for x in l:
    print (x)    
l=[x*x for x in range(1,9) if x%2==1]#创建1到9中奇数的平方的数列
for x in l:
    print (x)
l=[x+y for x in 'abc' for y in 'def'] #利用双层循环创建一个全排列列表
for x in l:
    print (x)

​
#生成器
#例子:
l=(x*x for x in range (1,10)) #此时l是一个生成器
#>>> l
#<generator object <genexpr> at 0x000001D3F0672740>
#生成器generator保存的是算法,可以通过next(l)取得l的下一个值
#generator是可以迭代的,如下
for x in l:
   print (x)
#稍复杂的generator  
def isprimenumber(n):
    for i in range(2,n):
        if n==2:
            return 1
        if n%i==0:
            return 0
    return 1
def generator (max):
    for x in range (2,max):
        flag=isprimenumber(x)
        if flag==1:
            yield x  
#普通函数是顺序执行,遇到return语句或者最后一行函数语句就返回。
#而变成generator的函数,在每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行。
for y in generator(100):
    print (y) 

​

生成器的使用案例——杨辉三角:

def triangle():
    l=[1]
    while 1:
        yield l
        m=[l[i]+l[i+1] for i in range (0,len(l)-1)]
        l=[1]+m+[1] #列表可以拼接
r=[]
n=1
for t in triangle():
    r.append(t)
    n=n+1
    if n>=10:
        break
for x in r:
    print(x)

map函数:

#map函数接收两个参数,一个是函数,另一个是iterator如列表list等
#例子
def f(x):
    return x*x
r=map(f,range(1,10)) 
l=list(r)#r是一个惰性的iterator,需要通过list()计算并传递给一个列表
for x in l:
    print(x)

reduce函数:

#reduce函数,是把一个函数作用于一个序列,这个函数必须接收两个参数
#reduce会把函数返回的结果再次与序列的下一个元素传递给该函数,再次计算,直到最后一个元素
from functools import reduce
def f(x,y):
    return x+y
print(reduce(f,[1,2,3,4])) #通过reduce求和
#例子,把字符串数字转换数字
def fn(x,y):
    return (x*10+y)
def char2num(s):
    d={'0':0,'1':1,'2':2,'3':3,'4':4,'5':5,'6':6,'7':7,'8':8,'9':9}
    return d[s]
string='1234567890'
print(reduce(fn,map(char2num,string)))
#map(char2num,string)把字符串转换成一个数字的iterator,fn再转换成数值

上一篇:python排序算法汇总


下一篇:nginx 防御采集和cc