語法
語法格式為 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,voriginal_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 ...