Day 12 遞迴,二分演算法,推導式,匿名函式

2022-08-21 14:15:13 字數 3474 閱讀 2848

sys 模組

import

sysprint(sys.getrecursionlimit()) #

遞迴深度 # 1000

sys.setrecursionlimit(2000) #

設定遞迴深度

print(sys.getrecursionlimit()) #

2000

遞迴例項

#

編寫乙個計算階乘的函式

deffunc(n):

if n == 1:

return 1

return func(n - 1) *n

print(func(5))

#

將下面列表中的數字列印出來 # l = [1, [2, [3, [4, [5, [6, [7]]]]]]]

deff(l):

for i in

l:

if type(i) is

int:

print(i,end='')

else

: f(i)

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

f(l)

#

第n個斐波那契數

deff(n):

if n == 1 or n == 2:

return 1

else

:

return f(n-1) + f(n-2)

print(f(20))

例項:

def

func(l):

index = len(l)//2

if l[index] >x:

ll = l[index+1:]

func(ll)

elif l[index] lr =l[:index]

func(lr)

else

:

return

index

l =[1,2,3,4,5,56,67,87]

x = 5

print(func(l))

三元表示式:當條件滿足時返回if前面的. 不滿足則返回else後面的.只適用於只有兩種情況的情況下..語法如下

x, y = 5, 6res = x if x > y else y  #

若x > y返回 x,否則返回 y

print(res)

列表生成式: 用[ ] 控制for 迴圈逐個取出列表中的元素交給for前面的語句逐個處理後生成乙個新的列表,若存在if判斷會先逐個交給if判斷,條件滿足後才會交給for 前面的語句.

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

l1 = [i + 1 for i in

l]print(l1) #

[2, 3, 4, 5, 6, 7]

l2 = [i + 1 for i in l if i != 3]

print(l2) #

[2, 3, 5, 6, 7]

字典生成式:  用{}  通過for迴圈列舉取出列表中的元素組成鍵值對然後組成字典,若存在if判斷會先逐個交給if判斷

l = ['

name

', '

age', '

addr']

dic =

print(dic) #

dic1 =

print(dic1) #

enumerate() 列舉補充: 將兩個列表對應的元素組成乙個字典

l = ['

name

', '

age', '

addr']

l1 = ['

jay', '

25', '

china']

dic ={}

for i,j in

enumerate(l):

dic[j] =l1[i]

print(dic) #

def

my_sum(x,y):

return x +y

#他倆是等價的

my_sum = lambda x, y : x + y

map()  對映:map()函式接收兩個引數,乙個是函式,乙個是序列,map將傳入的函式基於for迴圈依次作用到序列的每個元素,並把結果作為迭代器返回

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

print(list(map(lambda x : x ** 2,l ))) #

[1, 4, 9, 16, 25]

zip()  拉鍊: 將可迭代的物件作為引數,將物件中對應的元素打包成乙個個元組,然後返回乙個迭代器。如果各個迭代器的元素個數不一致,則返回列表長度與最短的物件相同

l1 = [1,2,]

l2 = ['

!','

@','#'

]l3 = ['

a','

b','c'

]print(list(zip(l1,l2,l3))) #

[(1, '!', 'a'), (2, '@', 'b')]

filter()  過濾 接收乙個函式 f 和乙個list,這個函式 f 的作用是對每個元素進行判斷,返回 true或 false,將返回false的元素過濾

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

print(list(filter(lambda x:x != 3,l))) #

[1, 2, 4, 5, 6]

#過濾掉列表中x == 3 的元素

sorted()  排序 list 的 sort 方法返回的是對已經存在的列表進行操作,無返回值,而內建函式 sorted 方法返回的是乙個新的 list,而不是在原來的基礎上進行的操作。

l = [1, 5, 2, 8, 9, 0]

l1 =sorted(l)

print(l) #

[1, 5, 2, 8, 9, 0]

print(l1) #

[0, 1, 2, 5, 8, 9]

reduce()  用傳給 reduce 中的函式 function(有兩個引數)先對集合中的第 1、2 個元素進行操作,得到的結果再與第三個資料用 function 函式運算,最後得到乙個結果。當有初始值時.先用初始值與第乙個元素操作

from functools import

reduce

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

l1 = reduce(lambda x,y : x +y, l) #

15l2 = reduce(lambda x,y : x + y, l,6) #

21print(l1 , l2)

day12 生成器和各種推導式

今天主要學習了 1.生成器 2.生成器函式 3.各種推導式 比較詭異,理解了很簡單,不理解很難 4.生成器表示式 重點 一.生成器 def func print 我叫周潤發 return 林志玲 return在函式中表示返回的意思 set func print set 這裡的set 就是建立了乙個生...

day12學習筆記(列表推導式 生成器 迭代器

迭代器iterator 列表推導式又稱之為列表解析式,運用列表解析式,可以快速生成list,可以通過乙個list推導出另乙個list,而 卻十分簡潔。經典語法 語法結構 每個列表推導式都在 for 之後跟乙個表示式,然後有零到多個 for 或 if 子句。列表推導式的執行順序 各語句之間是巢狀關係,...

二分查詢與遞迴式二分查詢

二分查詢 public class binarysearch arrays.sort arr todo auto generated method stub int low 0 int high arr.length 1 while low high elseelse 遞迴實現二分查詢 public...