匿名函式 列表生成式 字典生成式 遞迴

2022-04-10 16:21:45 字數 3425 閱讀 7164

語法

語法格式為 lambda 引數1,引數2,引數(引數可以省略):邏輯表示式(即結果,不可省略),引數的範圍(可省略)

lambda 引數:結果

lambda x, y: x*y;函式輸入是x和y,輸出是它們的積x*y

lambda:none;函式沒有輸入引數,輸出是none

lambda *args: sum(args); 輸入是任意個數的引數,輸出是它們的和(隱性要求是輸入引數必須能夠進行加法運算)

lambda **kwargs: 1;輸入是任意鍵值對引數,輸出是1

# map 對映

l = [1, 2, 3, 4, 5, 6]

print(list(map(lambda x: x + 5, l))) # 基於for迴圈 此處l就是引數x 的範圍

# [6, 7, 8, 9, 10, 11]

條件成立結果 if 條件 else 條件不成立結果 條件範圍(可不寫)

def max(x,y):

return x if x>y else y # 比較值大小

map(lambda x,y:x-y if x> y else y-x, [2,1,3],[4,3,1])  # 兩個列表相減並保證不為負

# [2, 2, 2]

# 示例一: 將0-9的10個數,奇數用0表示,偶數用1表示

[0 if i % 2 == 0 else 1 for i in range(10)]

# [0, 1, 0, 1, 0, 1, 0, 1, 0, 1]

字典推導式和三元表示式用法基本一致

'''

語法一:

key:字典中的key

value:字典中的value

dict.items():序列

condition:條件表示式

key_exp:在for迴圈中,如果條件表示式condition成立(即條件表示式成立),返回對應的key, value並作key_exp, value_exp處理

value_exp:在for迴圈中,如果條件表示式condition成立(即條件表示式成立),返回對應的key, value並作key_exp, value_exp處理

語法二:

key:字典中的key

value:字典中的value

dict.items():序列

condition:條件表示式

key_exp:在for迴圈中,如果條件表示式condition成立(即條件表示式成立),返回對應的key, value並作key_exp, value_exp處理

value_exp1:在for迴圈中,如果條件表示式condition成立(即條件表示式成立),返回對應的key, value並作key_exp, value_exp1處理

value_exp2:在for迴圈中,如果條件表示式condition不成立(即條件表示式不成立),返回對應的key, value並作key_exp, value_exp2處理

'''

案例

user_dict = dict()

for i in range(5):

user_dict[i] = i ** 2

print(user_dict)

# user_dict =

print(user_dict)

#

# 獲取其中的奇數k,v

original_dict =

user_dict =

print(user_dict) #

遞迴的官方解釋 比較繞口   我一般就理解為函式內部呼叫自己就是遞迴了

1、必須有乙個明確的結束條件

2、每次進入更深一層遞迴時,問題規模(計算量)相比上次遞迴都應有所減少

3、遞迴效率不高,遞迴層次過多會導致棧溢位(在計算機中,函式呼叫是通過棧(stack)這種資料結構實現的,每當進入乙個函式呼叫,棧就會加一層棧幀,每當函式返回,棧就會減一層棧幀。由於棧的大小不是無限的,所以,遞迴呼叫的次數過多,會導致棧溢位)

關於遞迴還有兩個名詞,可以概括遞迴實現的過程

遞推:像上邊遞迴實現所拆解,遞迴每一次都是基於上一次進行下一次的執行,這叫遞推

回溯:則是在遇到終止條件,則從最後往回返一級一級的把值返回來,這叫回溯

python當中一般認為是 998

1、遞迴求階乘

# 1!+2!+3!+4!+5!+...+n!

def factorial(n):

''' n表示要求的數的階乘 '''

if n==1:

return n # 階乘為1的時候,結果為1,返回結果並退出

n = n*factorial(n-1) # n! = n*(n-1)!

return n # 返回結果並退出

res = factorial(5) #呼叫函式,並將返回的結果賦給res

print(res) # 列印結果

2、遞迴推斐波那契數列

# 1,1,2,3,5,8,13,21,34,55,試判斷數列第十五個數是哪個?

def fabonacci(n):

''' n為斐波那契數列 '''

if n <= 2:

''' 數列前兩個數都是1 '''

v = 1

return v # 返回結果,並結束函式

v = fabonacci(n-1)+fabonacci(n-2) # 由資料的規律可知,第三個數的結果都是前兩個數之和,所以進行遞迴疊加

return v # 返回結果,並結束函式

print(fabonacci(15)) # 610 呼叫函式並列印結果

3、二分法找有序列表指定值

data = [1,3,6,13,56,123,345,1024,3223,6688]

def dichotomy(min,max,d,n):

'''min表示有序列表頭部索引

max表示有序列表尾部索引

d表示有序列表

n表示需要尋找的元素

'''mid = (min+max)//2

if mid==0:

return 'none'

elif d[mid]n:

print('向左側找!')

return dichotomy(min,mid,d,n)

else:

print('找到了%s'%d[mid])

return

res = dichotomy(0,len(data),data,222)

print(res)

函式 匿名函式,列表生成式

lambda x x 2關鍵字lambda表示匿名函式,冒號前面的x表示函式引數。匿名函式。用法 func lambda x x 2 print func 2 4l list map lambda x x 2,range 5 map func,iterables print l 0,2,4,6,8 ...

python 列表生成式,字典生成式

生成乙個列表,列表元素分別為 1 1,2 2.9 9 import math li for i in range 1,10 print li print i i for i in range 1,10 print i i for i in range 1,10 if i 2 0 找出1 10之間的所...

Python 列表生成式 字典生成式

通過生成式可以更加簡潔地生成列表和字典 列表生成式 對比 直接生成資料後加入列表示例 user list list for i in range 10 2 print user list 通過列表生成式直接生成示例 user list x 2for x in range 10 print user ...