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, ... 
随机推荐
- mysql8忘记登录密码时,修改密码方法
			一.停止mysqld进程 systemctl stop mysqld.service 二.修改/etc/my.cnf(在mysqld选项添加skip-grant-tables),设置免密码登录: vi ... 
- lnmp -memcached使用
			系统需求: CentOS/RHEL/Fedora/Debian/Ubuntu/Raspbian/Deepin Server/Aliyun/Amazon/Mint Linux发行版 需要5GB以上硬盘剩 ... 
- Python中的数据类型之字符串
			字符串的定义,可是使用类似下面的方式 name = "hello python" Python 中字符串自带了一些常用的方法,比如: title() #用来将每个单词首字母大写up ... 
- 每周一赛(E题,广搜求方案)
			Description In this problem, you are given an integer number s. You can transform any integer number ... 
- Spring核心技术(七)——Spring容器的扩展
			本文将讨论如何关于在Spring生命周期中扩展Spring中的Bean功能. 容器的扩展 通常来说,开发者不需要通过继承ApplicationContext来实现自己的子类扩展功能.但是Spring ... 
- 【03】placeholder
			placeholder 表单占位符解决方案 Css Code :-moz-placeholder, ::-webkit-input-placeholder{ color: #bfbfbf; } . ... 
- BNUOJ 5235 Starship Troopers
			Starship Troopers Time Limit: 5000ms Memory Limit: 32768KB This problem will be judged on HDU. Origi ... 
- Codeforces Round #351 (VK Cup 2016 Round 3, Div. 2 Edition)只有A题和B题
			连接在这里,->点击<- A. Bear and Game time limit per test 2 seconds memory limit per test 256 megabyte ... 
- java.lang.ClassNotFoundException: org.apache.jsp.WEB_002dINF.views.login_jsp
			背景:SpringBoot的项目配置了对jsp的支持,走控制器就报这个错误.相关配置如下: <!-- JSP BEGIN --> <dependency> <groupI ... 
- HDU 2222 (AC自动机)
			HDU 2222 Keywords search Problem : 给若干个模式串,询问目标串中出现了多少个模式串. Solution : 复习了一下AC自动机.需要注意AC自动机中的fail,和n ... 
