Python 13 內置函數二

內置函數知識點二

  1. lamda匿名函數
  2. sorted()
  3. filter()
  4. map()
  5. 遞歸函數

lamda 怎麼使用javascript

#計算n的n次方 普通的函數寫
def func(n):
  return n**n
print(func(10))

一, lamda匿名函數

爲了解決一些簡單的需求而設計的一句話函數html

f = lambda n: n**n
print(f(10))

lambda代表的是匿名函數. 不須要用def來聲明, 一句話就能夠聲明出一個函數java

語法:

函數名 = lambda 參數: 返回值

注意:算法

  1. 函數的參數能夠有多個. 多個參數之間用逗號隔開
  2. 匿名函數無論多複雜. 只能寫一行, 且邏輯結束後直接返回數據
  3. 返回值和正常的函數同樣, 能夠是任意數據類型

二,sorted()排序函數

語法: sorted(Iterable, key=None, reverse=False)
Iterable: 可迭代對象
key: 排序規則(排序函數), 在sorted內部會將可迭代對象中的每個元素傳遞給這個函
數的參數. 根據函數運算的結果進行排序
reverse: 是不是倒敘. True: 倒敘, False: 正序
看一下例子 ↓↓↓函數

lst = [1,5,3,4,6]
lst2 = sorted(lst)
print(lst) # 原列表不會改變
print(lst2) # 返回的新列表是通過排序的
#字典排序
dic = {1:'A', 3:'C', 2:'B'}
print(sorted(dic)) # 字典. 則返回排序事後的ke
lst = ["菊次郎的夏天", "越獄", "中央情報局", "忠犬小八"]
# 計算字符串長度
def func(s):
  return len(s)
print(sorted(lst, key=lambda s: len(s)))
lst = [{"id":1, "name":'alex', "age":23},
 {"id":2, "name":'wusir', "age":22},
 {"id":3, "name":'taibai', "age":20}]
# 按照 (年齡)對學生信息進行排序
print(sorted(lst, key=lambda e: e['age']))

三,filter()篩選函數

語法: filter(function. Iterable)
function: 用來篩選的函數. 在filter中會自動的把iterable中的元素傳遞給function. 而後
根據function返回的True或者False來判斷是否保留此項數據
看一下例子 ↓↓↓spa

lst = [1,2,3,4,5,6,7]
ll = filter(lambda x: x%2==0, lst) # 篩選全部的偶數
print(ll)
print(list(ll
lst = [{"id":1, "name":'alex', "age":18},
 {"id":2, "name":'wusir', "age":16},
 {"id":3, "name":'taibai', "age":17}]
fl = filter(lambda e: e['age'] > 16, lst) # 篩選年齡大於16的數據
print(list(fl))

四, map()映射函數

語法: map(function, iterable) 能夠對可迭代對象中的每個元素進行映射. 分別取執行
function
看一下例子 ↓↓↓設計

計算列表中每一個元素的平方 ,返回新列表code

lit = [1,2,3,4,5]
print(list(map(lambda x: x * x,lit)))

計算兩個列表中相同位置的數據的和htm

lst1 = [1, 2, 3, 4, 5]
lst2 = [2, 4, 6, 8, 10]
print(list(map(lambda x, y: x+y, lst1, lst2)))

五,遞歸

在函數中調用函數自己. 就是遞歸對象

def func():
   print("我是誰")
   func()
func()

遞歸的應用:
咱們能夠使用遞歸來遍歷各類樹形結構, 好比咱們的文件夾系統. 能夠使遞歸歸來遍歷該
文件夾中的全部文件

import os
def read(filepath, n):
    files = os.listdir(filepath) # 獲取到當前⽂件夾中的全部文件
    for fi in files: # 遍歷文件夾中的文件, 這⾥獲取的只是本層文件名
        fi_d = os.path.join(filepath,fi) # 加入文件夾 獲取到文件夾+文件
        if os.path.isdir(fi_d): # 如該路徑下的文件是文件夾
            print("\t"*n, fi)
            read(fi_d, n+1) # 繼續進行相同的操做
        else:
            print("\t"*n, fi) # 遞歸出口. 最終在這裏隱含着return
#遞歸遍歷⽬錄下全部⽂件
read('../oldboy/', 0)

六,二分查找

二分查找. 每次可以排除掉一半的數據. 查找的效率很是高. 可是侷限性比較大. 必須是有
序序列才能夠使用二分查找

輸入一個數判斷是否在lst中出現. 若是出現請返回n所在的位置
二分查找---非遞歸算法

lst = [22, 33, 44, 55, 66, 77, 88, 99, 101, 238, 345, 456, 567, 678, 789]
left = 0
right = len(lst) -1
num = int(input("輸入一個數"))
while left<= right:
    mid = (left+right) // 2
    if num > lst[mid]:
        left = mid + 1
    elif num < lst[mid]:
        right = mid - 1
    else:
        print("找到了")
        break
else:
    print("沒找到")
相關文章
相關標籤/搜索