Nginx和HAProxy对比,各有什么美图手机的优点和不足与不足

Python 列表生成式与生成器
我的图书馆
Python 列表生成式与生成器
列表生成式即List Comprehensions,是Python内置的非常强大的可以用来创建list的生成式。列表生成式:1、如要生成list[n,n+1,n+2,n+3,.....,m-1],可用range(n,m);
range(3,30)
2、在区间(n,m)中生成n,n+1,n+2,...,m-1的平方,可用[n*n for n in range(n,m)]
[n * n for n in range(5,15)]
如在上式的for后加上条件则可以筛选出符合条件的元素
[n * n for n in range(5,15) if n % 3 ==0]
3、也可以使用两层循环,可以生成全排列,如
[m+n for m in 'EFSD' for n in "KLD"]
4、运用列表生成式,可以写出非常简洁的代码。例如列出当前目录下的所有文件和目录名导入模块 os,调用os中的listdir()函数。
列出当前目录下的所有文件和目录名
学过Python 的迭代特性,会了解for循环可以同时使用两个甚至多个变量,因此列表也可以使用两个变量来生成list.
使用两个变量来生成list
5、把list中所有的字符串变成小写
字符串变成小写
小结:运用列表生成式,可快速生成list,且代码十分简洁当list中包含字符串与整数时,使用lower()函数会报错,可以使用内置函数判断一个元素是否是字符串
先判断后转换
生成器(generator):通过列表生成式可快速创建一个列表,但是会受到内存限制,当创建一个列表包含超级多个元素时,不仅占用很大的存储空间,如果仅仅访问前面一部分的元素,则后面的绝大部分占用的空间就浪费了。而生成器的使用的是一边循环一边计算的机制,即解决使用列表生成式创建包含超级多的元素时造成的内存空间浪费的问题。使用生成器创建列表时,与列表生成式很相似,即把中括号表位圆括号:即[]-&()生成器创建后,可使用G.next()输出元素,按序输出,但是生成器也是可迭代对象,可用for循环来迭代它。
生成器的创建于输出
生成器功能强大,如生成斐波拉契数列(Fibonacci)Fibonacci:除第一与第二个数外,任意一个数都可由前两个数相加得到:
print -&yield的区别
要把fib函数变成generator,只需要把print y改为yield y就可以了,这就是定义generator的另一种方法。如果一个函数定义中包含yield关键字,那么这个函数就不再是一个普通函数,而是一个generator。小结generator是非常强大的工具,在Python中,可以简单地把列表生成式改成generator,也可以通过函数实现复杂逻辑的generator。要理解generator的工作原理,它是在for循环的过程中不断计算出下一个元素,并在适当的条件结束for循环。对于函数改成的generator来说,遇到return语句或者执行到函数体最后一行语句,就是结束generator的指令,for循环随之结束。文/沫小白(简书作者)原文链接:/p/ca30ef8a4b1c著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
发表评论:
TA的推荐TA的最新馆藏[转]&可重复、不可重复取组合生成器python代码 - 简书
可重复、不可重复取组合生成器python代码
如abc三个元素,取两个相互组合,可重复取的话有,aa ab ac bb bc cc六种,不可重复取有 ab ac bc三种,从结果我可以看出,可重复取特点是,一个组合结果中,后一位元素的在原始序列中的索引大于等于前一位元素在原始原始序列中的索引,a的原始索引为0,b为1,c为2,aa 索引组合为00,ab为01,ac为02,bb为22,bc为23……以此类推。不可重复取组合的特点是一个组合结果中,后一位元素的在原始序列中的索引大于前一位元素在原始原始序列中的索引。ab 索引组合01,ac 为03,bc为13。以下为python代码,思路都一样,两种写法。第一种写法:
def combinations(array,cSpace,index,m):
#不可重复取组合生成器
for i in range(cSpace.__len__()):
print(cSpace[i],end='')
print(' ',end='')
for i in range(array.__len__()):
cSpace[index] = array[i];
if index==0:
combinations(array=array,cSpace=cSpace,index=index+1,m=m-1)
elif index&0:
cIndex=array.index(cSpace[index])
pIndex=array.index(cSpace[index-1])
if cIndex&pIndex:
combinations(array=array,cSpace=cSpace,index=index+1,m=m-1)
def combinations_with_replacement(array,cSpace,index,m):
#可重复取组合生成器
for i in range(cSpace.__len__()):
print(cSpace[i],end='')
print(' ',end='')
for i in range(array.__len__()):
cSpace[index] = array[i];
if index==0:
combinations_with_replacement(array=array,cSpace=cSpace,index=index+1,m=m-1)
elif index&0:
cIndex=array.index(cSpace[index])
pIndex=array.index(cSpace[index-1])
if cIndex&=pIndex:
combinations_with_replacement(array=array,cSpace=cSpace,index=index+1,m=m-1)
if __name__ == '__main__':
array=list('abcd')#元素
m=3#所取元素个数
cSpace=list(range(m))
combinations(array=array,cSpace=cSpace,index=0,m=m)
combinations_with_replacement(array=array,cSpace=cSpace,index=0,m=m)
第二种写法:
def combinations_with_replacement(array,cSpace,begin,index,m):
#不可重复取组合生成器
for i in range(cSpace.__len__()):
print(cSpace[i],end='')
print(' ',end='')
realBegin=begin
if realBegin&0:
realBegin=begin-1
for i in range(realBegin,array.__len__()):
cSpace[index] = array[i];
combinations_with_replacement(array=array,cSpace=cSpace,begin=i+1,index=index+1,m=m-1)
def combinations(array,cSpace,begin,index,m):
#可重复取组合生成器
for i in range(cSpace.__len__()):
print(cSpace[i],end='')
print(' ',end='')
for i in range(begin,array.__len__()):
cSpace[index] = array[i];
combinations(array=array,cSpace=cSpace,begin=i+1,index=index+1,m=m-1)
if __name__ == '__main__':
array=list('abcd')#元素
m=3#所取元素个数
cSpace=list(range(m))
combinations(array=array,cSpace=cSpace,begin=0,index=0,m=m)
combinations_with_replacement(array=array,cSpace=cSpace,begin=0,index=0,m=m)
以上代码运行后的结果:不可重复取abc abd acd bcd ;可重复取aaa aab aac aad abb abc abd acc acd add bbb bbc bbd bcc bcd bdd ccc ccd cdd dddpython的itertools库里也有现成的组合和排列的实现,不过排列好像只实现了不可重复取,可重复取的并未实现。python(24)
一、循环结构
&&& range(1,5) #代表从1到5(不包含5)
[1, 2, 3, 4]
&&& range(1,5,2) #代表从1到5,间隔2(不包含5)
&&& range(5) #代表从0到5(不包含5)
[0, 1, 2, 3, 4]
1.for &i &in &range(10)使用序列的每个元素进行循环:
或直接读取
&&& for i in 'abcd':
dfor i in ['abc','def']:
&&& a=['abc','def']
&&& for i in range(len(a)):
print a[i]
2.for &i &in &range(0,len(q),2)使用序列的下标进行循环:
3.for (index,char) in enumerate(S)同时使用下标和元素进行循环
4.for (a,b,c) in zip(ta,tb,tc):从多个等长序列中取一个元素作为新序列
二、循环结构原理:自动调用循环对象的next方法。
循环对象--for自动调用循环对象的next方法,直到出现StopIteration停止循环
循环对象是这样一个对象,它包含有一个next()方法(__next__()方法,在python 3x中), 这个方法的目的是进行到下一个结果,而在结束一系列结果之后,举出StopIteration错误。
当一个循环结构(比如for)调用循环对象时,它就会每次循环的时候调用next()方法,直到StopIteration出现,for循环接收到,就知道循环已经结束,停止调用next()。
如循环对象:f=open(),返回的实际上是一个循环对象,包含有next()方法。等于for结构自动调用next()方法,将该方法的返回值赋予给line。
三、生成器--用户自己生成一个循环对象
和函数定义类似,只是在return的地方改为yield。当生成器遇到一个yield时,会暂停运行生成器,返回yield后面的值。当再次调用生成器的时候,会从刚才暂停的地方继续运行,直到下一个yield。
四、列表推导--快速生成列表
列表推导(List comprehension)的作用是为了更方便地生成列表(list)
如一个list变量的元素均为数字,如果需要将每个元素的值乘以2并生成另外一个list
常规方法:
使用列表推导
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:69443次
积分:1979
积分:1979
排名:第16024名
原创:126篇
转载:19篇
(3)(4)(3)(1)(7)(3)(2)(7)(8)(4)(5)(8)(31)(25)(1)(1)(7)(1)(2)(5)(2)(5)(3)(2)(4)(3)

我要回帖

更多关于 领导班子优点和不足 的文章

 

随机推荐