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, 调用函数时,函数体代码 ...
随机推荐
- AtCoder Beginner Contest 070
我好想有点思维江化,所以我想给这个丝毫没有问题的abc也写下 A - Palindromic Number Time Limit: 2 sec / Memory Limit: 256 MB Score ...
- [译]__main__ 顶级脚本环境
'main'是其中顶级代码执行的范围的名称.一个模块的__name__可以从标准输入,脚本,或从一个交互式命令行中等方式被设置成等于'main'. 一个模块可以发现它是否是通过检查自身在主运行范围__ ...
- [CODEVS1912] 汽车加油行驶问题(分层图最短路)
传送门 吐槽:神tm网络流 dis[i][j][k] 表示到 (i, j) 还有 k 油的最优解 然后跑spfa,中间分一大堆情况讨论 1.当前队头还有油 1.目标点有加油站——直接过去 2.目标点每 ...
- 刷题总结——寻宝游戏(bzoj3991 dfs序)
题目: Description 小B最近正在玩一个寻宝游戏,这个游戏的地图中有N个村庄和N-1条道路,并且任何两个村庄之间有且仅有一条路径可达.游戏开始时,玩家可以任意选择一个村庄,瞬间转移到这个村庄 ...
- mysql监控指标
1.最大连接数监控 show VARIABLES like "max_connections"; //最大连接数 show global status like 'Threads_ ...
- PHP分页类(较完美)
<?php /** file: page.class.php 完美分页类 Page */ class Page { private $total; //数据表中总记录数 private $lis ...
- CSS3动画那么强,requestAnimationFrame还有毛线用--摘抄
CSS3动画那么强,requestAnimationFrame还有毛线用? 这篇文章发布于 2013年09月30日,星期一,19:12,归类于 web综合. 阅读 197124 次, 今日 84 次 ...
- 线程间通过PostMessage通信
1.查看TMS项目中的相关实例 ::PostMessage(hWnd, WM_USER_MSG_REFRESH_UI, (WPARAM)UMP_REFRESH_MEMBER_INFO, 0); 参考文 ...
- MySQL 源码编译安装
脚本须知: 1. 该脚本目前只测试过mysql版本为5.6.x的源码,其他源码可以对本脚本稍作修改即可 2. 本脚本也可以使用wget mysql源码的方式进行,但考虑到后期提供源码的地址不可用,所以 ...
- Struts学习总结(一)
1,需要包下载地址: http://archive.apache.org/dist/struts/binaries/ 2.报错:org/apache/commons/lang3/StringUtils ...