首页 > 其他 > 详细

3-列表推导式 字典推导式 生成器

时间:2020-11-04 21:08:13      阅读:53      评论:0      收藏:0      [点我收藏+]

 

1.列表推导式

思考:如何生成一个num0-100的列表

用for 循环来实现:

my_list = []
for i in range(101):
    li = "num{}".format(i)
    my_list.append(li)
print(my_list)

 

用列表推导式---依赖for循环,表达式放在列表里面,根据前面的式子,按照for循环取值依次放在列表中

my_list1 = ["num{}".format(i) for i in range(101)]
print(my_list1)

output:[‘num0‘, ‘num1‘, ‘num2‘, ‘num3‘, ‘num4‘。。。。。。。‘num100‘]

 

2.字典推导式

知道来列表推导式,再来看看字典推导式,照葫芦画瓢

dic = {"num{}".format(i):i+1 for i in range(5)}
print(dic) #{‘num0‘: 1, ‘num1‘: 2, ‘num2‘: 3, ‘num3‘: 4, ‘num4‘: 5}

 

练习:使用字典推导式,将下面字符串格式的数据,改成字典类型的数据

str = "name=zhangsan;age=17;gender=boy;phone=1309998890"
dict1 = { item.split("=")[0]:item.split("=")[1] for item in str.split(";")}
print(dict1) #{‘name‘: ‘zhangsan‘, ‘age‘: ‘17‘, ‘gender‘: ‘boy‘, ‘phone‘: ‘1309998890‘}

 

3.生成器 ---节省内存,提高性能

1??按照上面的推导式,用元组,是不是元组推导式呢?看下:

tu = (i for i in range(6))  #生成器
print(tu) #<generator object <genexpr> at 0x102f57150>

嗯?不是元组推导式,是一个generater,生成器。--------没有元组推导式的说法哦!!!!

生成器保留计算的规则,即生成器对象存储的是计算公式,想需要多少数据,再去生成,避免内存的浪费。---比如存储1000万条数据,用列表存储,就要放1000条数据进去;生成器只是存储个公式,减少内存。

 

2??获取生成器的全部数据--将其转化为list

tu = (i for i in range(6))
print(tu) #<generator object <genexpr> at 0x102f57150>
print(list(tu))#[0, 1, 2, 3, 4, 5]

如何一个一个获取生成器的数据

tu = (i for i in range(6))
print(tu) #<generator object <genexpr> at 0x102f57150>
# print(list(tu))
print(next(tu))
print(next(tu))
print(next(tu))
print(next(tu))
print(next(tu))
print(next(tu))
print(next(tu))
"""
<generator object <genexpr> at 0x10b6d9150>
0
1
2
3
4
5
Traceback (most recent call last):
  File "/Users/juan.cao/virenv/soft_deve_day1/列表推导shi.py", line 28, in <module>
    print(next(tu))
StopIteration
"""

取完所有数据以后,再执行取元素操作,会报错。

 

4.yield生成器

1??定义个函数,没有return值,打印结果为none

def fun():
    #yield
    print("python")

print(fun())
#output: python
#        None

 

2??加上yield,就是一个生成器函数

def fun():
    yield
    print("python")

print(fun()) #<generator object fun at 0x101464150>

拓展

def fun():
    "函数生成器"
    yield 100
    print("python")
    yield 1000
    print("hello")
    yield 10000

print(fun())   #<generator object fun at 0x101464150>
res = fun()
print(next(res)) #函数运行到yield,输出100,在此处暂停
print(next(res)) #再次运行,从print("python")处释放,继续运行到yield输出数据,又暂停
print(next(res)) #同理,从print("hello")处释放,运行到最后。函数生成器的全部数据已经取完,再执行就会报错。
#<generator object fun at 0x1090eb150>
# 100
# python
# 1000
# hello
# 10000

 

3-列表推导式 字典推导式 生成器

原文:https://www.cnblogs.com/ananmy/p/13927612.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!