列表生成式 与生成器表达式
Posted C3的脚印
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了列表生成式 与生成器表达式相关的知识,希望对你有一定的参考价值。
列表生成式
示例
生成一个列表 l=[\'egg1\',\'egg2\',\'egg3\',\'\'egg4\',........\'egg99\'] 按照常规写法如下: list=[] for i in range(100): list.append(\'egg%s\'%(i)) print(list) 但是如果我们按照列表的生成方式来做就很简单: list=[\'egg%s\' %i for i in range(100)] print(list)
#打印结果如下:
[\'egg0\', \'egg1\', \'egg2\', \'egg3\', \'egg4\', \'egg5\', \'egg6\', \'egg7\', \'egg8\', \'egg9\', \'egg10\', \'egg11\', \'egg12\', \'egg13\', \'egg14\', \'egg15\', \'egg16\', \'egg17\', \'egg18\', \'egg19\', \'egg20\', \'egg21\', \'egg22\', \'egg23\', \'egg24\', \'egg25\', \'egg26\', \'egg27\', \'egg28\', \'egg29\', \'egg30\', \'egg31\', \'egg32\', \'egg33\', \'egg34\', \'egg35\', \'egg36\', \'egg37\', \'egg38\', \'egg39\', \'egg40\', \'egg41\', \'egg42\', \'egg43\', \'egg44\', \'egg45\', \'egg46\', \'egg47\', \'egg48\', \'egg49\', \'egg50\', \'egg51\', \'egg52\', \'egg53\', \'egg54\', \'egg55\', \'egg56\', \'egg57\', \'egg58\', \'egg59\', \'egg60\', \'egg61\', \'egg62\', \'egg63\', \'egg64\', \'egg65\', \'egg66\', \'egg67\', \'egg68\', \'egg69\', \'egg70\', \'egg71\', \'egg72\', \'egg73\', \'egg74\', \'egg75\', \'egg76\', \'egg77\', \'egg78\', \'egg79\', \'egg80\', \'egg81\', \'egg82\', \'egg83\', \'egg84\', \'egg85\', \'egg86\', \'egg87\', \'egg88\', \'egg89\', \'egg90\', \'egg91\', \'egg92\', \'egg93\', \'egg94\', \'egg95\', \'egg96\', \'egg97\', \'egg98\', \'egg99\']
跟一个if判断条件 如下:
list=[\'egg%s\' %i for i in range(100) if i>20] print(list) #打印结果如下: [\'egg21\', \'egg22\', \'egg23\', \'egg24\', \'egg25\', \'egg26\', \'egg27\', \'egg28\', \'egg29\', \'egg30\', \'egg31\', \'egg32\', \'egg33\', \'egg34\', \'egg35\', \'egg36\', \'egg37\', \'egg38\', \'egg39\', \'egg40\', \'egg41\', \'egg42\', \'egg43\', \'egg44\', \'egg45\', \'egg46\', \'egg47\', \'egg48\', \'egg49\', \'egg50\', \'egg51\', \'egg52\', \'egg53\', \'egg54\', \'egg55\', \'egg56\', \'egg57\', \'egg58\', \'egg59\', \'egg60\', \'egg61\', \'egg62\', \'egg63\', \'egg64\', \'egg65\', \'egg66\', \'egg67\', \'egg68\', \'egg69\', \'egg70\', \'egg71\', \'egg72\', \'egg73\', \'egg74\', \'egg75\', \'egg76\', \'egg77\', \'egg78\', \'egg79\', \'egg80\', \'egg81\', \'egg82\', \'egg83\', \'egg84\', \'egg85\', \'egg86\', \'egg87\', \'egg88\', \'egg89\', \'egg90\', \'egg91\', \'egg92\', \'egg93\', \'egg94\', \'egg95\', \'egg96\', \'egg97\', \'egg98\', \'egg99\']
满足后面的if条件的情况下 在把值给到前面的表达式中去运用
一般情况只跟一个if条件 , 多了就不适合了
语法:list=[表达式 +循环体+(if判断)]
优点:方便 改变了编程习惯 可称之为声明式编程
生成式表达式:
1、把列表推导式的[]换成生成器表达式就得到一个生成器。 就满足了在生成列表内容过大,防止内存撑爆的情况下, 改用生成器就很好的解决这一问题。
2、示例:生一筐鸡蛋变成给你一只老母鸡,用的时候就下蛋,这也是生成器的特性
老母鸡=(‘egg%s’%i for i in range(100))
print(next(老母鸡)#打印结果 egg0
print(next(老母鸡)#打印结果 egg1
需要一个值 就调用一次
需要一次就调用一次
3、优点:省内存,一次只生产一个值在内存中。
以上是关于列表生成式 与生成器表达式的主要内容,如果未能解决你的问题,请参考以下文章