python--列表推导式和生成表达式

看到这个标题有没有很邪恶!推导式********************哈哈!我喜欢这个东西

和列表一样,列表推导式也采用方括号[]表示,并且用到了一个简写版的for循环,第一部分是一个生成结果列表元素的表达式,第二部分是一个输入表达式上的循环。阅读理解列表表达式的推荐做法是先从里面的for循环开始,向右查看是否有if条件,然后将推导式开始的那个表达式映射到每一个匹配的元素上去。

在这个例子中,我们用到了列表推导式,看起来有没有很叼,一行代码就搞定了

abc=[x for x in range(10) if x % 2 ==0 if x >5]
print(abc)
>>>[6,8]

如果不用列表推导式的话
#abc=[]
#for i in range(10):
#  if x % 2 == 0:
#    if x >5:
#    abc.append(x)
#print(abc)
#>>>[6.8]

有没有很low,就算用and if 也要两行,一个好的程序员能用一行代码能搞定的就不用两行甚至三行来做,所以来吧baby们,推倒吧!


python还支持另外一种和列表表达式类似的结构,叫做生成器表达式(generator expression),除了它有一种称之为“惰性计算”的特点以外,它和列表推导式的用法基本一致。它的工作方式是每次处理一个对象,而不是一口气处理和构造整个数据结构,这样做的潜在优点是可以节省大量的内存
下面这个例子和上面有没有很相似呢!那就是用()代替了[],这就变成了生成式了,如果直接print输出,会提示你
<generator object <genexpr> at 0x033E5120>这段代码,说你输出的东西不是迭代器
这时候需要内置函数__iter__来搞定转化成迭代器。
再用__next__函数来输出生成器里的内容。
也许你觉得麻烦,但是如果你的列表是range(10000000000000)的时候,你还敢直接读进内存么,你要敢这么做,分分钟几十万上下的钱没了!
这时候就需要用生成器了 ,占内存小!

abc=(x for x in range(10) if x % 2 ==0 if x >5)
a=iter(abc)
print(next(a))
print(next(a))
>>>6
>>>8
原文地址:https://www.cnblogs.com/DE_LIU/p/7274285.html