列表推导式----生成器表达式

列表推导式:

  基本形式: [表达式  for  参数  in  可迭代对象]   或者 [表达式  for  参数  in  可迭代对象  if   条件]

  实例:

 1 l = []
 2 for i in range(100):
 3     l.append(‘egg%s‘ %i)
 4 print i
 5
 6 #不带if条件
 7     l = [‘agg%s‘ %i for i in range(100) ]
 8
 9 #带if条件
10     l = [‘agg%s‘ %i for i in range(100)  if i>10]

生成器表达式

  将列表推导式的中括号改为小括号即可

  l = (‘egg%s‘ %i  for i in range(100)  if i>10)

  print(next(l))

  注意:得到的结果为迭代器

 1 # 1、将names=[‘egon‘,‘alex_sb‘,‘wupeiqi‘,‘yuanhao‘]中的名字全部变大写
 2 # names=[‘egon‘,‘alex_sb‘,‘wupeiqi‘,‘yuanhao‘]
 3 # names = [name.upper() for name in names]
 4 # print(names)
 5
 6
 7 #
 8 # 2、将names=[‘egon‘,‘alex_sb‘,‘wupeiqi‘,‘yuanhao‘]中以sb结尾的名字过滤掉,然后保存剩下的名字长度
 9 # res=[len(i) for i in names if not i.endswith(‘sb‘)]
10 # print(list(res))
11 # 3、求文件a.txt中最长的行的长度(长度按字符个数算,需要使用max函数)
12 # with open(‘a.txt‘,‘r‘,encoding=‘utf-8‘) as f:
13 #     res = max([len(line) for line in f])
14 #     print(res)
15
16 #如果数据量过大,使用生成器表达式更为恰当
17 # with open(‘a.txt‘, ‘r‘, encoding=‘utf-8‘) as f:
18 #     res = max(len(line) for line in f)   #生成器表达式的小括号与max的小括号可以和为一个
19 #     print(res)
20
21 # 4、求文件a.txt中总共包含的字符个数?思考为何在第一次之后的n次sum求和得到的结果为0?(需要使用sum函数)
22 # with open(‘a.txt‘,‘r‘,encoding=‘utf-8‘) as f:
23 #     res = sum(len(line) for line in f)
24 #     print(res)
25 # 第一次求和之后,文件光标已经移到末尾,再次求和没有内容可以循环出来
with open(‘a.txt‘) as f:
    g=(len(line) for line in f)
print(sum(g)) #为何报错?

#g是一个生成器对象,不知直接求和,必须取值之后才能求和

6、文件shopping.txt内容如下

mac,20000,3
lenovo,3000,10
tesla,1000000,10
chicken,200,1

求总共花了多少钱?

打印出所有商品的信息,格式为[{‘name‘:‘xxx‘,‘price‘:333,‘count‘:3},...]

求单价大于10000的商品信息,格式同上

# with open(‘a.txt‘,‘r‘,encoding=‘utf-8‘) as f:
#     info = [line.split(‘,‘) for line in f]
#     cost=sum(int(price) * int(count) for *_,price,count in info)
#     print(cost)

# with open(‘a.txt‘,‘r‘,encoding=‘utf-8‘) as f:
#     info=[{‘name‘:line.split(‘,‘)[0],
#       ‘price‘:int(line.split(‘,‘)[1]),
#       ‘count‘:int(line.split(‘,‘)[2])}
#         for line in f]
#     print(info)

# with open(‘a.txt‘,encoding=‘utf-8‘) as f:
#     info=[{
#         ‘name‘: line.split()[0],
#         ‘price‘: float(line.split()[1]),
#         ‘count‘: int(line.split()[2]),
#     } for line in f if float(line.split()[1]) > 10000]
#     print(info)

    

原文地址:https://www.cnblogs.com/guodengjian/p/8708621.html

时间: 2024-10-29 10:32:56

列表推导式----生成器表达式的相关文章

(列表推导式,生成器表达式,内置函数)

一,列表生成式 示例一: 生成1~100的列表 生成1-100的列表 1 2 3 4 5 li = [] for i in range(1,101):     li.append(i) print(li) 执行输出: [1,2,3...] 生成python1期~11期li = []for i in range(1,12): li.append('python{}期'.format(i))print(li) 执行输出: ['python1期', 'python2期', 'python3期'...]

三元表达式 列表推导式 生成器表达式

# 三元表达式# def my_max(x,y):# if x >= y:# return x# else:# return y## res=my_max(1,2)# print(res) # 2 # x=10# y=20# res=x if x >= y else y## print(res) # 20 # name=input('>>:name').strip()# res='Yes' if name == 'OBOS' else 'No'## print(res) # 列表推

python基础-三元表达式/列表推导式/生成器表达式

1.三元表达式:如果成立返回if前的内容,如果不成立返回else的内容 name=input('姓名>>: ') res='SB' if name == 'alex' else 'NB' print(res) 2.列表推导式:l=['egg'+str(i) for i in range(1,11)] print(l) 3.生成器表达式: l=('egg'+str(i) for i in range(1,11) if i >6) for i in l: print(i) 原文地址:http

Python学习笔记2:构造序列:列表推导和生成器表达式

欢迎访问个人网站:www.comingnext.cn 1. 关于Python内置序列类型 a. 按能否存放不同类型的数据区分 容器序列: list.tuple 和collections.deque这些序列能存放不同类型的数据 扁平序列: str.bytes.bytearray.memoryview和array.array,这类序列只能容纳一种类型. b. 按能否被修改来分类 可变序列: list.bytearray.array.array.collections.deque 和 memoryvi

python之列表推导和生成器表达式

首先来看一下代码: chars = "abcd" tmp = [] for char in chars: tmp.append(ord(char)) print(tmp) 这是一般的写法,将字符串中的每一个字符转换称ASCII码,然后存进一个tmp数组. 利用列表推导的方式: tmp = [ord(char) for char in chars] 输出:[97,98,99,100] 列表推导中也可以使用if和else. 当只有一个if时: chars = "abcd"

列表推导式和生成器

一.列表推导式 列表推导是构建列表(list)的快捷方式,而生成器表达式则可以创建其他任何类型的序列,如果你的代码里并不 经常使用它们,你有可能错过很多可读性很好的而且更高效的代码的机会 示例1: 把一个字符串变成Unicode码位的列表 示例2:把字符串变成Unicode码位的另外一种写法(列表生成式) 在python2.x中,在列表推导中for关键词之后的赋值操作可能会影响列表推导的 上下文中的同名变量.像下面这个python2.7控制台对话: 如你所见,x原本的值被取代了,但是这种在pyt

生成器表达式,列表推导式

两者的区别在于一个用的是(),另外一个用B[] 生成器表达式: G = (x**2 for x in range(5)) 列表推导式: L = [x**2 for x in range(5)]

生成器表达式 和 列表推导式

列表推导式   [i** 2 for i in [1,2,3]] print(li) li2=[int(i/2) for i in range(0,7,2)] print(li2) 生成器表达式 # 生成器 表达式 简化代码 g=(i for i in range(5)) # 没有元组推导式 for i in g: print(i) 例子  0 list=[{'name':'alex','age':80},{'name':'egon','age':40},{'name':'neza','age'

第9条:用生成器表达式来改写数据量较大的列表推导式

核心知识点: (1)当输入的数据量较大时,列表推导可能会因为占用太多内存而出问题. (2)由生成器表达式所返回的迭代器,可以逐次产生输出值,从而避免内存用量问题. (3)把某个生成器表达式所返回的迭代器,放在另一个生成器表达式的for子表达式中,即可将二者结合起来. (4)串在一起的生成器表达式执行速度很快. 列表推导式的缺点是:在推导过程中,对于输入序列中的每个值来说,可能都要创建仅含一项元素的全新列表. 当输入的数据比较少时,不会出任何问题,但如果输入的数据非常多,那么可能会消耗大量内存,并