python-----列表生成式和列表生成器表达
列表表达式:
程序一:
常规写法:
L = []
for x in range(1, 11):
L.append(x * x)
print(L)
#[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
列表生成式写法:
L = [x * x for x in range(1, 11)]
#[1, 4, 9, 16, 25, 36, 49, 64, 81, 100] #写列表生成式时,把要生成的元素x * x放到前面,后面跟for循环,就可以把list创建出来,十分有用,多写几次,很快就可以熟悉这种语法。for循环后面还可以加上if判断,这样我们就可以筛选出仅偶数的平方: L1 = [x * x for x in range(1, 11) if x % 2 == 0]
print(L1)
#[4, 16, 36, 64, 100]
程序二:
常规写法:
list = [1,2,3,4]
s = 'hello'
list1 = []
for num in list:
for s1 in s:
t=(num,s1)
list1.append(t)
print(list1)
#[(1, 'h'), (1, 'e'), (1, 'l'), (1, 'l'), (1, 'o'), (2, 'h'), (2, 'e'), (2, 'l'), (2, 'l'), (2, 'o'), (3, 'h'), (3, 'e'), (3, 'l'), (3, 'l'), (3, 'o'), (4, 'h'), (4, 'e'), (4, 'l'), (4, 'l'), (4, 'o')]
列表生成式写法:
list1 = [(num,s1) for num in list for s1 in s]
print(list1)
#[(1, 'h'), (1, 'e'), (1, 'l'), (1, 'l'), (1, 'o'), (2, 'h'), (2, 'e'), (2, 'l'), (2, 'l'), (2, 'o'), (3, 'h'), (3, 'e'), (3, 'l'), (3, 'l'), (3, 'o'), (4, 'h'), (4, 'e'), (4, 'l'), (4, 'l'), (4, 'o')]
程序三:
常规写法:
import os # 查看test文件夹所有的绝对路径
g = os.walk(r'E:\test')
file_path_list = []
for i in g:
print(i)
for j in i[-1]:
file_path_list.append('%s\\%s' % (i[0], j))
print('%s\\%s' % (i[0], j))
print(file_path_list)
列表生成式写法:
g = os.walk(r'E:\test')
file_path_list = ['%s\\%s' % (i[0], j) for i in g for j in i[-1]]
print(file_path_list)
生成器表达式:
相比列表表达式,只不过将[]换成了(),更加省内存。
程序一:
列表生成式写法:
L = [x * x for x in range(1, 11)]
#[1, 4, 9, 16, 25, 36, 49, 64, 81, 100] #写列表生成式时,把要生成的元素x * x放到前面,后面跟for循环,就可以把list创建出来,十分有用,多写几次,很快就可以熟悉这种语法。for循环后面还可以加上if判断,这样我们就可以筛选出仅偶数的平方: L1 = [x * x for x in range(1, 11) if x % 2 == 0]
print(L1)
#[4, 16, 36, 64, 100]
生成器表达式写法:
L11 = (x * x for x in range(1, 11))
print(L11)
print(next(L11))
print(next(L11))
print(next(L11))
for L in L11:
print(L11)
L12 = (x * x for x in range(1, 11) if x % 2 == 0)
print(L12)
print(next(L12))
print(next(L12))
print(next(L12))
for L in L12:
print(L12)
程序二:
常规写法:
f=open('a.txt')
l=[]<br>f.seek(0) #光标移动到文档首行首位
for line in f:
line=line.strip()
l.append(line)
列表表达式写法:
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-----列表生成式和列表生成器表达的更多相关文章
- 列表生成式,迭代器&生成器
python3中range(10)就 是迭代器 列表生成式 #列表生成式 a=[0,1,2,3,4,5] b=[] for index,i in enumerate(a): a[index]+1 pr ...
- python列表生成式、列表推导式
运用列表生成式,可以快速生成list,可以通过一个list推导出另一个list,而代码却十分简洁. 格式 [x for x in 内容] [x for x in 内容 if 条件] 1:要把生成的元素 ...
- Day4- Python基础4 深浅拷贝、三目运算、列表生成式,迭代器&生成器、装饰器
本节内容: 1.深浅拷贝 2.三目运算 3.迭代器和生成器 4.装饰器 1.深浅拷贝 拷贝意味着对数据重新复制一份,深浅拷贝的含义就是:对于修改复制的数据是否会影响到源数据,拷贝操作对于基本数据结构需 ...
- python迭代器和生成器(3元运算,列表生成式,生成器表达式,生成器函数)
1.1迭代器 什么是迭代器: 迭代器是一个可以记住遍历的位置对象 迭代器对象从集合的第一个元素元素开始访问,直到所有元素被访问完结束,迭代器只能往前不会后退. 迭代器有两个基本方法:iter ,nex ...
- python 列表生成式,生成器&迭代器
列表生成式: 需求:要对列表 [0,1,2,3,4,5,6,7,8,9]的每个元素加1 用列表生成式一步搞定: li = [i+1 for i in range(10)] # 这种写法就叫列表生成式 ...
- Day4 函数、列表生成式、生成器、迭代器
温故而知新: 1. 集合 主要作用: 去重 关系测试, 交集\差集\并集\反向(对称)差集 2. 元组 只读列表,只有count, index 2 个方法 作用:如果一些数据不想被人修改, 可以存成元 ...
- 简学Python第四章__装饰器、迭代器、列表生成式
Python第四章__装饰器.迭代器 欢迎加入Linux_Python学习群 群号:478616847 目录: 列表生成式 生成器 迭代器 单层装饰器(无参) 多层装饰器(有参) 冒泡算法 代码开发 ...
- Python学习笔记6(列表生成式)
1.生成列表 要生成list [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],我们可以用range(1, 11): >>> range(1, 11) [1, 2, 3 ...
- Python入门基础之迭代和列表生成式
什么是迭代 在Python中,如果给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们成为迭代(Iteration). 在Python中,迭代是通过 for ...
- Python 入门(十)列表生成式
生成列表 要生成list [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],我们可以用range(1, 11): >>> range(1, 11) [1, 2, 3, ...
随机推荐
- C++ 类 直接定义对象与new对象的区别
new创建类对象与直接定义的区别 new创建对象的特点 new创建类对象需要指针接收,一处初始化,多处使用 new创建类对象使用完需delete销毁 new创建对象直接使用堆空间,而局部不用new定义 ...
- Codeforces Round #413 B T-shirt buying (STL set)
链接:http://codeforces.com/contest/799/problem/B 题意: 给定n件衣服,对于第i(1<i<=n)件衣服,分别有价格pi,前颜色ai,后颜色bi三 ...
- Python基础之列表、元组、字典、集合的使用
一.列表 1.列表定义 names=["Jhon","Lucy","Michel","Tom","Wiliam ...
- CodeForces - 425E Sereja and Sets 题解
题目大意: 我们有一个集合 S,其中包含了 m 个不完全相同的区间[l1,r1],[l2,r2]…[lm,rm] (1≤li≤ri≤n,li,ri 都为整数). 定义 f(S)=k,表示集合 S 中能 ...
- POJ1094 / ZOJ1060
#include <cstdio> #include <cstring> #include <stack> #include <iostream> us ...
- OpenCV在Linux(Fedora)下搭建开发环境简述
盼望了好久的Fedora21终于发行了.先来晒一张图: 默认桌面还是那么简洁: 好了,废话少说.来看看在Fedora下搭建opencv开发环境,因为我已经搭建好了(过程比较艰辛) 先注明参考文章,感谢 ...
- AjaxFileUpload文件上传组件(php+jQuery+ajax)
jQuery插件AjaxFileUpload可以实现ajax文件上传,下载地址:http://www.phpletter.com/contents/ajaxfileupload/ajaxfileupl ...
- [bzoj1578][Usaco2009 Feb]Stock Market 股票市场_完全背包dp
Stock Market 股票市场 bzoj-1578 Usaco-2009 Feb 题目大意:给定一个$S\times D$的大矩阵$T$,其中$T[i][j]$表示第i支股票第j天的价格.给定初始 ...
- Mayor's posters-POJ2528(线段树+离散化)
The citizens of Bytetown, AB, could not stand that the candidates in the mayoral election campaign h ...
- P1665 正方形计数
P1665 正方形计数 题目描述 给定平面上N个点,你需要计算以其中4个点为顶点的正方形的个数.注意这里的正方形边不一定需要和坐标轴平行. 输入输出格式 输入格式: 第一行一个数X,以下N个点的坐标. ...