1.推導(dǎo)式
推導(dǎo)式又稱(chēng)解析式玛迄,通過(guò)一個(gè)數(shù)據(jù)序列生產(chǎn)另一個(gè)新的數(shù)據(jù)序列的方法
- 1.1 列表推導(dǎo)式
- 基礎(chǔ)語(yǔ)法:
[元素表達(dá)式,for 元素 in 舊列表]
棚亩。 - 帶條件
[元素表達(dá)式蓖议,for 元素 in 舊列表 if 條件表達(dá)式]
。 - 嵌套循環(huán)推導(dǎo)式
[元素1和2表達(dá)式蔑舞,for 元素1 in 列表1 for 元素2 in 列表2]
- 基礎(chǔ)語(yǔ)法:
lst1 = [2,4,6,8,10]
lst2 = [i**2 for i in lst1]#[4, 16, 36, 64, 100]
lst3 = [i*3 for i in lst1 if i%4==0]#[12, 24]
lst4 = [m*n for m in lst2 for n in lst3]#[48, 96, 192, 384, 432, 864, 768, 1536, 1200, 2400]
lst5 = [m/n for m in lst2 for n in lst3 if m%n==0]#[3.0]
lst6 = [m*n/i for m in lst2 for n in lst3 for i in lst1 if m*n/i >1000]#[1200.0]
- 1.2 字典推導(dǎo)式
語(yǔ)法:```{key:value for key,value in items}
lst1 = [2,4,6,8,10]
lst2 = [i**2 for i in lst1]#[4, 16, 36, 64, 100]
dct1 = {key:value for key,value in zip(lst1,lst2)}#{2: 4, 4: 16, 6: 36, 8: 64, 10: 100}
- 1.3 集合推導(dǎo)式
語(yǔ)法類(lèi)似列表
import random
s1 = {random.randint(1,100) for i in range(10)}#在1到100之間隨機(jī)生成10個(gè)數(shù),形成一個(gè)集合嘹屯,自動(dòng)去重
2.生成器
- 2.1 生成器的作用
主要用于節(jié)約資源攻询,當(dāng)數(shù)據(jù)量比較龐大時(shí),把它全部放進(jìn)容器中比較占用內(nèi)存資源州弟,這時(shí)可以用生成器來(lái)按需讀取數(shù)據(jù)钧栖。 - 2.2 生成器表達(dá)式
- 語(yǔ)法
(元素表達(dá)式 for 元素 in 數(shù)據(jù)序列)
g = (i for i in range(20))#<generator object <genexpr> at 0x04BF7488> print(g.__next__())#0 print(g.__next__())#1 print(g.__next__())#2 print(g.__next__())#3 print(next(g))#4 print(next(g))#5 for i in g: print(i)
- 語(yǔ)法
- 2.3 yield生成器函數(shù)
在函數(shù)中添加yield關(guān)鍵字,這是函數(shù)就是一個(gè)生成器婆翔。
"""
日期:2020/8/9 21:09
作者:di0edi
文件名:testify.py
軟件:PyCharm
題目:證明1**3+2**3+……+n**3 = (1+2+……+n)**2
"""
def fn1(n):
while n > 0:
yield pow(n,3)
n -= 1
def fn2(n):
while n>0:
yield n
n -= 1
while True:
sign = input("是否繼續(xù)驗(yàn)證拯杠,請(qǐng)輸入y/n,y表示繼續(xù)啃奴,n表示退出:")
if sign == 'n':
print("再見(jiàn)L杜恪!最蕾!")
break
else:
while True:
try:
n = int(input('請(qǐng)輸入一個(gè)整數(shù):'))
except Exception as e:
print(f'{type(e)}:{e}')
continue
else:
break
r1 = 0
r2 = 0
for i in range(n):
r1 += next(fn1(n))
r2 += next(fn2(n))
r3 = pow(r2,2)
if r1 == r3:
print(f'當(dāng){n=}時(shí)依溯,等式成立!N猎颉黎炉!結(jié)果為{r3}')
這個(gè)程序試過(guò)百萬(wàn)級(jí)別的數(shù)字能等一會(huì)出結(jié)果。
3.迭代器
- 3.1 迭代
百度百科上迭代是重復(fù)反饋過(guò)程的活動(dòng)醋拧,其目的通常是為了逼近所需目標(biāo)或結(jié)果慷嗜。每一次對(duì)過(guò)程的重復(fù)稱(chēng)為一次“迭代”,而每一次迭代得到的結(jié)果會(huì)作為下一次迭代的初始值丹壕。
我理解迭代就是在一定的基礎(chǔ)上不斷重復(fù)某些活動(dòng)庆械,使其基礎(chǔ)不斷厚實(shí),最終達(dá)到由量變到質(zhì)變的改變菌赖。我覺(jué)得的學(xué)習(xí)就是一個(gè)典型的迭代場(chǎng)景干奢。 - 3.2 迭代器
在python中迭代器對(duì)象是一個(gè)數(shù)據(jù)流,從序列中的一個(gè)元素開(kāi)始訪問(wèn)盏袄,直到所有的元素被訪問(wèn)完結(jié)束忿峻,而且只能往前不能往后薄啥。
可以被next()函數(shù)調(diào)用并不斷返回下一個(gè)值的對(duì)象我們稱(chēng)之為迭代器 Iterator。 - 3.2 可迭代對(duì)象
可迭代對(duì)象不一定是迭代器逛尚,可迭代對(duì)象有個(gè)內(nèi)置方法iter()垄惧,該方法可以將可迭代對(duì)象變?yōu)榈鳎钥傻鷮?duì)象用for循環(huán)遍歷時(shí)不需要用索引绰寞,實(shí)際上在遍歷時(shí)到逊,通過(guò)iter()方法將可迭代對(duì)象變?yōu)榈鳎缓笥?strong>next()方法遍歷可迭代對(duì)象滤钱。
通過(guò)iter()函數(shù)可以將可迭代的變成一個(gè)迭代器觉壶。
生成器是迭代器的一種。