python(19)- 列表生成式和生成器表达式练习Ⅰ
列表表达式
程序一:
常规写法:
egg_list=[] for i in range(100):
egg_list.append('egg%s' %i)
print(egg_list)
列表表达式写法:
l=['egg%s' %i for i in range(100) if i > 0] #列表写法:[命令+循环语句]。'egg%s' %i 这句话在列表中,所以不用append命令写入列表中
print(l)
程序二:
常规写法:
l=[1,2,3,4]
s='hello'
l1=[]
for num in l:
for s1 in s:
t=(num,s1)
l1.append(t)
print(l1)
列表表达式写法:
l1=[(num,s1) for num in l if num > 0 for s1 in s] #if num >0 这句判断可以去掉
print(l1)
程序三:
常规写法:
import os
#查看xuyaping文件夹所有的绝对路径
g=os.walk('F:\\xuyaping')
file_path_list=[]
for i in g:
# print(i)
for j in i[-1]:
file_path_list.append('%s\\%s' %(i[0],j)) print(file_path_list)
列表表达式写法:
g=os.walk('F:\\xuyaping')
l1=['%s\\%s' %(i[0],j) for i in g for j in i[-1]]
print(l1)
生成器表达式
相比列表表达式,只不过将[]换成了(),更加省内存。
程序一:
列表表达式写法:
l=['egg%s' %i for i in range(10000)]
print(l)
生成器表达式写法:
g=l=('egg%s' %i for i in range(10000))
print(g)
print(next(g))
print(next(g))
for i in g:
print(i)
程序二:
常规写法:
f=open('a.txt')
l=[]
f.seek(0) #光标移动到文档首行首位
for line in f:
line=line.strip()
l.append(line)
print(l)
列表表达式写法:
f=open('a.txt')
f.seek(0)
l1=[line.strip() for line in f]
print(l1)
生成器表达式写法:
f=open('a.txt')
f.seek(0)
g=(line.strip() for line in f)
print(g)
print(next(g))
程序三:
生成器表达式写法:
f=open('a.txt')
g=(line.strip() for line in f) #g为迭代器 l=list(g) #list(可迭代对象),迭代取出g中的所有内容
print(l)
---->['asdfasdfasdfasdfasdf', '123123123123', '123123123123', '123123123123', '123123123123', '123123123123', '123123123123', '123123123123', '123123123123', '123123123123', '123123123123', '123123123123', '123123123123', '123123123123', '123123123123', '123123123123', '123123123123', '123123123123', '123123123123', '123123123123', '123123123123', '', 'asdfasdfasdfasdf'] nums_g=(i for i in range(3)) # print(sum([1,2,3,4]))
print(sum(nums_g)) #sum(可迭代对象),迭代将g中的所有元素相加
asdfasdfasdfasdfasdf
123123123123
123123123123
123123123123
123123123123
123123123123
123123123123
123123123123
123123123123
123123123123
123123123123
123123123123
123123123123
123123123123
123123123123
123123123123
123123123123
123123123123
123123123123
123123123123
123123123123 asdfasdfasdfasdf
a.txt
程序四:
常规方法:
money_l=[]
with open('b.txt') as f:
for line in f:
goods=line.split()
res=float(goods[-1])*float(goods[-2])
money_l.append(res)
print(money_l)
---->[30.0, 1000000.0, 6000.0, 90000.0, 30.0]
生成器表达式写法:
f=open('b.txt')
g=(float(line.split()[-1])*float(line.split()[-2]) for line in f) print(sum(g))
---->1096060.0
程序五:
res=[]
with open('b.txt') as f:
for line in f:
# print(line)
l=line.split()
# print(l)
d={}
d['name']=l[0]
d['price']=l[1]
d['count']=l[2]
res.append(d) print(res)
---->[{'name': 'apple', 'price': '10', 'count': '3'}, {'name': 'tesla', 'price': '1000000', 'count': '1'}, {'name': 'mac', 'price': '3000', 'count': '2'}, {'name': 'lenovo', 'price': '30000', 'count': '3'}, {'name': 'chicken', 'price': '10', 'count': '3'}]
生成器表达式写法:
with open('b.txt') as f:
res=(line.split() for line in f)
print(res)
dic_g=({'name':i[0],'price':i[1],'count':i[2]} for i in res)
print(dic_g)
apple_dic=next(dic_g)
print(apple_dic['count']) apple_dict=next(dic_g)
print(apple_dict)
---->{'name': 'tesla', 'price': '1000000', 'count': '1'}
apple 10 3
tesla 1000000 1
mac 3000 2
lenovo 30000 3
chicken 10 3
b.txt
#取出单价>10000
with open('b.txt') as f:
res=(line.split() for line in f)
# print(res)
dic_g=({'name':i[0],'price':i[1],'count':i[2]} for i in res if float(i[1]) > 10000)
print(dic_g)
----> <generator object <genexpr> at 0x0000000001E05888>
print(list(dic_g))
----> [{'name': 'tesla', 'price': '1000000', 'count': '1'}, {'name': 'lenovo', 'price': '30000', 'count': '3'}]
python(19)- 列表生成式和生成器表达式练习Ⅰ的更多相关文章
- python 之 列表生成式、生成器表达式、模块导入
5.16 列表生成式 l=[]for i in range(100): l.append('egg%s' %i)print(l)l=['egg%s' %i for i in range(100 ...
- python基础----列表生成式、生成器表达式
结论: 1.把列表解析的[]换成()得到的就是生成器表达式 2.列表解析与生成器表达式都是一种便利的编程方式,只不过生成器表达式更节省内存 3.Python不但使用迭代器协议,让for循环变得更加通用 ...
- Python基础-列表生成式和生成器表达式
一.列表生成式(List Comprehension) 列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式. 举个例子,要生成list ...
- 【转】Python之列表生成式、生成器、可迭代对象与迭代器
[转]Python之列表生成式.生成器.可迭代对象与迭代器 本节内容 语法糖的概念 列表生成式 生成器(Generator) 可迭代对象(Iterable) 迭代器(Iterator) Iterabl ...
- CSIC_716_20191114【生成器、匿名函数、内置函数、三元表达式、列表生成式、生成器表达式】
生成器: 函数与yield连用,凡是函数中有yield的,调用该函数的时候均不会立即执行,而是会返回一个生成器. 生成器本质上是一个迭代器,需要通过 [生成器.__next__()]或者[nex ...
- python迭代器和生成器(3元运算,列表生成式,生成器表达式,生成器函数)
1.1迭代器 什么是迭代器: 迭代器是一个可以记住遍历的位置对象 迭代器对象从集合的第一个元素元素开始访问,直到所有元素被访问完结束,迭代器只能往前不会后退. 迭代器有两个基本方法:iter ,nex ...
- Python之列表生成式、生成器、可迭代对象与迭代器
本节内容 语法糖的概念 列表生成式 生成器(Generator) 可迭代对象(Iterable) 迭代器(Iterator) Iterable.Iterator与Generator之间的关系 一.语法 ...
- python基础之协程,列表生成式,生成器表达式
三元表达式 #三元表达式 name = 'alex' name = 'egon' res='SB' if name == 'alex'else 'shuai' print(res)#输出:shuai ...
- python基础语法9 生成器,面向对象编程思想,三元表达式,列表生成式,生成器表达式(生成式),匿名函数,内置函数
生成器 1.什么是生成器? 生成的工具. 生成器是一个 "自定义" 的迭代器, 本质上是一个迭代器. 2.如何实现生成器 但凡在函数内部定义了的yield, 调用函数时,函数体代码 ...
随机推荐
- TOJ4483: Common Digit Pairs
4483: Common Digit Pairs Time Limit(Common/Java):3000MS/9000MS Memory Limit:65536KByteTotal Sub ...
- pycharm配置 自动运行指定脚本
配置:RUN -Debug Configuration Script: 脚本的地址 Script Parameters: 脚本的参数 Interpreter: python解释器
- 区别Transform、Transition、Animation
另一篇参考文章:http://www.7755.me/Article/CSS3/39/ 近来上班之外就是研究研究CSS动画,下面是第一阶段总结.话说为加强记忆,实则想抛砖引玉! 标题直译一下就是: ...
- poj1985&&第四次CCF软件认证第4题 求树的直径
Cow Marathon Time Limit: 2000MS Memory Limit: 30000K Total Submissions: 4216 Accepted: 2137 Case ...
- classpath路径
在项目被集成开发环境编译后,src目录下的东西会编译到WEB-INF/classes目录下,而WEB-INF/classes目录就是所谓的classpath. 将数据库连接配置dataSource.x ...
- python多进程(multiprocessing)
最近有个小课题,需要用到双进程,翻了些资料,还算圆满完成任务.记录一下~ 1.简单地双进程启动 同时的调用print1()和print2()两个打印函数,代码如下: #/usr/bin/python ...
- 【Luogu】P3358最长k可重区间集问题(费用流)
题目链接 这题费用瘤,数据貌似还是错的. 把线段抽象抽象拆成两个点,入点表示左端,出点表示右端,连上容量为1费用-长度的边. 不相交线段随便连下,源点向拆出的原点S'连费用为0容量k,然后跑费用流. ...
- BZOJ 4551 [Tjoi2016&Heoi2016]树 ——并查集
树剖显然可以做. 然而有一种更神奇的方法,并查集+时光倒流. 每个节点指向它上面最近的标记节点,标记节点指向自己,然后删除标记,就可以用并查集查询了. #include <map> #in ...
- CentOS7开启docker远程访问
在 CentOS 中没有 /etc/default/docker,另外在 CentOS7 中也没有找到 /etc/sysconfig/docker这个配置文件. 在 /usr/lib/systemd/ ...
- 洛谷 [P1948] 电话线
二分答案 首先,最大值最小,就是二分答案 #include <iostream> #include <cstdio> #include <algorithm> #i ...