列表生成式 与生成器表达式

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、优点:省内存,一次只生产一个值在内存中。

 

 

 


 

以上是关于列表生成式 与生成器表达式的主要内容,如果未能解决你的问题,请参考以下文章

python函数--生成器,生成器表达式,列表推导式

python—day14内置函数2列表生成式与生成器表达式模块

列表推导式与生成表达式的区别

列表推导式和生成器表达式

函数 三元表达式 列表生成式 字典生成式 生成器表达式

Python之第十五天的努力--生成器,列表推导式,生成器表达式,内置函数1(了解)