列表推導式 生成器表示式

2022-09-08 05:15:18 字數 2321 閱讀 2375

列表推導式:

基本形式: [表示式  for  引數  in  可迭代物件]   或者 [表示式  for  引數  in  可迭代物件  if   條件]

例項:

1 l =

2for i in range(100):

egg%s

' %i)

4printi5

6#不帶if條件

7 l = ['

agg%s

' %i for i in range(100) ]89

#帶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)56

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)

1516

#如果資料量過大,使用生成器表示式更為恰當17#

with open('a.txt', 'r', encoding='utf-8') as f:18#

res = max(len(line) for line in f) #生成器表示式的小括號與max的小括號可以和為乙個19#

print(res)

2021

#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

求總共花了多少錢?

列印出所有商品的資訊,格式為[,...]

求單價大於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=[

#for line in f]

#print(info)

#with open('a.txt',encoding='utf-8') as f:

#info=[ for line in f if float(line.split()[1]) > 10000]

#print(info)

列表推導式,生成器表示式

生成器表示式,列表推導式 其他推導式 變數 加工後的變數 for 變數 in iterable 迴圈模式 變數 加工後的變數 for 變數 in iterable if 條件 篩選模式 優點 1,節省 一行搞定.2,看著高大上.缺點 不好排錯.整體 凡是用列表推導式構造的列表物件,用其他方式都可構建...

Python 列表推導式 生成器表示式

一行 幾乎搞定你需要的任何的列表。篩選模式 優缺點將列表推導式的 換成 即可。100w資料占用記憶體很大,所以對於資料量比較大的資料,要用生成器表示式 g i for i in range 1000000 print g print g.next print g.next 字典推導式 1.將乙個字典...

Python 列表推導式 生成器表示式

列表推導式就是使用乙個簡單的方法建立乙個列表 列表裡元素的型別是根據for前面的資料型別而定的 a m for m in range 31 print a 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,2...