三元表示式 列表推導式 字典生成式 生成器 遞迴

2022-07-02 18:30:13 字數 3770 閱讀 2672

目錄三元表示式

列表推到式

字典生成式

生成器遞迴

可迭代物件:可迭代的物件,內建有__iter__方法的物件都是可迭代物件,除了數字型別,所有資料型別都是可迭代物件。

python內建str、list、tuple、dict、set、file都是可迭代物件

迭代器物件:執行可迭代物件的__iter__方法,執行該方法會拿到返回值,這個返回值就是可迭代物件。

為什麼要有迭代器物件:提供了一種不依賴索引取值的手段。

特點:缺點:

for迴圈稱為迭代器迴圈,in後必須是可迭代的物件。

def for1(iterable):

iterable = iterable.__iter__()

while true:

try:

print(iterable.__next__())

except stopiteration:

break

for1([1,2,3,4])

123

4

# x = 10

# y = 20

# if x > y:

# print(x)

# else:

# print(y)

print(x) if x > y else print(y)

#條件成立走這裡 if 條件 else 條件不成立走這裡

# lt = 

## for i in range(10):

lt = [i**2 for i in range(10)]#此處可對i進行取冪等運算

# from typing import iterable # 匯出乙個可迭代物件型別

## print(isinstance(range(10),iterable)) # 判斷是否屬於該資料型別

print()
zip()函式用於將可迭代的物件作為引數,將物件中對應的元素打包成乙個個元組,然後返回由這些元組組成的列表。

如果各個迭代器的元素個數不一致,則返回列表長度與最短的物件相同,利用 * 號操作符,可以將元組解壓為列表。

zip 方法在 python 2 和 python 3 中的不同:在 python 3.x 中為了減少記憶體,zip() 返回的是乙個物件。如需展示列表,需手動 list() 轉換。

如果需要了解 pyhton3 的應用,可以參考 python3 zip()。

zip 語法:

zip([iterable, ...])
引數說明:

返回元組列表。

res = zip([1,2,3],[4,2,3,4,2,3,4,2,3],'abcadsfasdfasdf')  # res是乙個迭代器,__next__返回元組

print(res.__next__()) # type:tuple

print(res.__next__()) # type:tuple

print(res.__next__()) # type:tuple

(1, 4, 'a')

(2, 2, 'b')

(3, 3, 'c')

利用zip()方法生成字典

lt1 = ['a','b','c']

lt2 = [1,2,3]

dic =

print(dic)

generator本質是乙個迭代器——》生成器:本質就是迭代器,是乙個自定義的迭代器。

g = (i for i in range(10))#生成器表示式

print(g)

for i in g:

print(i)

#列表推導式相當於直接給你一筐蛋,而生成器表示式相當於給你乙隻老母雞。

lt = [i for i in range(10)]#列表生成式

print(lt)

at 0x000001cdcb260258>01

2345

6789

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

含有yield關鍵字的函式叫做生成器

def ge():

yield 3 # 乙個yield相當於乙個next; 暫停函式

yield 4

yield 5

# print(ge()) # ge()得到乙個生成器 --> 生成器本質是迭代器

g = ge() # 得到乙個生成器

print(g.__next__())#乙個yield只能迭代一次

print(g.__next__())

#print(g.__next__())

#for i in g:

# print(i)#乙個乙個迭代,如果next沒有迭代完就繼續迭代,如果next已經將yield迭代完就停止迭代輸出

3未注釋掉最後兩行時45

注釋掉最後兩行時34

yield:

提供一種自定義迭代器的方式

yield可以暫停住函式,並提供當前的返回值

yield和return:

相同點:兩者都是在函式內部使用,都可以返回值,並且返回值沒有型別和個數的限制

不同點:return只能返回一次之;yield可以返回多次值

生成器表示式

一、直接呼叫

遞迴:在函式a內部直接呼叫函式a本身,遞迴必須要有退出條件。

寫遞迴程式的方法:先寫迴圈再替換成遞迴

def a():

global count

count += 1

print(count)

if count == 5

return

a()a()

特點:

二、間接呼叫

間接呼叫指的是:不是在原函式體內呼叫函式自身,而是通過其他的方法間接呼叫函式自身。

def bar():

print('from bar')

foo()

def foo():

print('from foo')

bar()

bar()

遞迴必須要有兩個明確的階段:

速回:遞迴必須要有乙個明確的結束條件,在滿足該條件開始一層一層回溯

遞迴的精髓在於不斷的重複逼近乙個最終的結果

'''

...age(5) = age(4) + 2

age(4) = age(3) + 2

age(3) = age(2) + 2

age(2) = age(1) + 2

age(1) = 26

age(n) = age(n-1) +2

age(1) = 26 # n=1

'''def age(n):

if n == 1:

return 26

res = age(n-1) + 2

return res

print(f"age(5): ")

#age(5): 34

迭代器,三元表示式,列表推導式,字典生成式

迭代器 指定資料建立迭代器 使用iter 和next x 1 2,3 y iter x for i in y print i,end print 迭代物件 定義魔術方法 next 和 iter classa def init self self.x 0def next self self.x 1if...

三元表示式,列表生成式,字典生成式,生成器表示式

三元表示式 條件成立時的返回值 if 條件 else 條件不成立時的返回值 def max2 x,y if x y return x else return y 表示式 x 10 y 20 res x if x y else y print res 列表生成式 中括號生成的 l item 2 for...

三元表示式 列表推導式 生成器表示式

一 三元表示式 def max2 x,y if x y return x else return y res 條件成立時執行的表示式 if 條件 else 條件不成立時執行的表示式 x 11 y 22 res x 12 if x y else y 100 print res 二 列表推導式 1 示例...