파이썬 익명 함수 / 정렬 기능 / 필터 기능 / 매핑 기능 / 재귀 / 이분법

이 문서에서는 파이썬 익명 함수 / 정렬 기능 / 필터 기능 / 매핑 기능 / 순환 / 이분법, 코드의이 논문의 예는 훌륭한 세부 사항에 당신에게, 참조에 대한 특정 값을 가지고, 필요로하는 친구를 참조 할 수 설명
가. 람다 익명의 기능
  단어의 몇 가지 간단한 요구 사항과 디자인 기능을 해결하기 위해

# 计算n的n次方
def func(n):
 return n**n
print(func(10))
f = lambda n: n**n
print(f(10))

람다는 익명 함수를 나타냅니다. 데프 함수를 선언 할 수있는 단어, 선언 할 필요가 없습니다

구문 :
    함수 이름 = 람다 파라미터 : 반환 값

참고 :

기능 1. 매개 변수는 여러 파라미터의 쉼표 다수로 분리 할 수없는
  전용 라인을 작성하는 방법을 복소 함수에 관계없이 2 익명 직접 논리 종료 후 데이터를 반환
  할 수있다, (3)의 리턴 값 정상적인 기능 모든 데이터 유형

익명 함수는 몇 가지 이름이없는 말을하지 않습니다. 여기에 변수의 앞에 함수 이름입니다. 우리는 __name__을 통해 더 이름을보고하지 않는 경우 그 이유는 그가 익명이라고합니다. 통일은 람다했다. 아무것도 특별 통화의 시간에 관하여있다 장소. 일반 함수 호출과 같은

두 정렬 () 분류 기능.
  구문 : 분류 (Iterable을, 키 = 없음 , 역 = 거짓)

반복 가능한 : 반복 가능 객체

키 정렬 (정렬 기능), 내부의 각 요소는 계산 결과의 정렬 함수에 함수에 전달 정렬 반복 개체 매개 변수가 될 것입니다.

리버스 :이 플래시백 진정한 :. 플래시백, 거짓 여부 : 긍정적 순서를

lst = [1,5,3,4,6]
lst2 = sorted(lst)
print(lst) # 原列表不会改变
print(lst2) # 返回的新列表是经过排序的
dic = {1:'A', 3:'C', 2:'B'}
print(sorted(dic)) # 如果是字典. 则返回排序过后的key

그리고 기능을 함께 사용

# 根据字符串长度进行排序
lst = ["鲁班七号", "程咬金", "安琪拉", "阿珂"]
# 计算字符串长度
def func(s):
 return len(s)
print(sorted(lst, key=func))

그리고 조합 람다

# 根据字符串长度进行排序
lst = ["鲁班七号", "程咬金", "安琪拉", "阿珂"]
# 计算字符串长度
def func(s):
 return len(s)
print(sorted(lst, key=lambda s: len(s)))
lst = [{"id":1, "name":'鲁班', "age":28},
  {"id":2, "name":'安琪拉', "age":16},
  {"id":3, "name":'阿珂', "age":25}]
# 按照年龄对信息进行排序
print(sorted(lst, key=lambda e: e['age']))

세. 필터 () 함수 스크리닝

구문 : 필터 (. 기능의 Iterable)

기능 : 자동 필터 기능의 요소는 기능에 따라 결정되고 반복 가능한 패스하고이 데이터가 유지되어 있으면 참 또는 거짓 반환 스크리닝하는 기능.

  1. 지도 () 함수 맵핑

반복 가능한 : 반복 가능 객체

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":'鲁班', "age":18},
  {"id":2, "name":'安琪拉', "age":16},
  {"id":3, "name":'阿珂', "age":17}]
fl = filter(lambda e: e['age'] > 16, lst) # 筛选年龄大于16的数据
print(list(fl))

네.지도 () 함수 맵핑

구문 :지도 (반복 가능한 함수) 반복 가능 객체를 별도로 실행 기능을 가지고, 각 요소에 매핑 될 수있다.

새로운 목록을 반환 목록의 각 요소의 제곱을 계산

def func(e):
 return e*e
mp = map(func, [1, 2, 3, 4, 5])
print(mp)
print(list(mp))

재 작성 람다

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

목록과 데이터 모두에서 동일한 위치를 계산

# 计算两个列表相同位置的数据的和
lst1 = [1, 2, 3, 4, 5]
lst2 = [2, 4, 6, 8, 10]
print(list(map(lambda x, y: x+y, lst1, lst2)))

V.의 재귀

자체가 재귀 함수에서 함수를 호출

  def func():
 print("我是递归")
 func()
func()

최대 998의 파이썬 깊이 재귀

def foo(n):
 print(n)
 n += 1
 foo(n)
foo(1) 

재귀 적으로 적용 :
  우리가 그 폴더에있는 모든을 통해 루프에 파일을 재귀를 사용할 수있는 등 우리의 폴더 시스템으로 트리의 다양한 통과 할 재귀를 사용할 수 있습니다.

import os
def func(filepath,n):
 files = os.listdir(filepath) # 查案当前文件的目录
 for file in files: # 获取每一个文件名
  # 获取文件路径
  file_p = os.path.join(filepath,file)
  if os.path.isdir(file_p): # 判断file是否是一个文件夹
   print("\t"*n,file)
   func(file_p,n+1)
  else:
   print("\t"*n,file)
func("/Volumes/扩展盘/网站css",0)

VI. 이진 검색

이진 검색. 데이터의 각 반은 매우 높은 효율을 검색 할 수 있습니다. 제외 할 수 있습니다.하지만 이진 검색을 사용하기 전에 비교적 큰의 한계는 순서를 주문해야합니다

요구 사항 : 순서가 정렬 된 순서입니다 찾아야합니다.

  # 判断n是否在lst中出现. 如果出现请返回n所在的位置
lst = [22, 33, 44, 55, 66, 77, 88, 99, 101, 238, 345, 456, 567, 678, 789]
# 非递归算法
# 使用二分法可以提高效率 前提条件有序序列
n = 88
left = 0
right = len(lst) - 1
 
while left <= right: # 边界,当右边比左边还小的时候退出循环
 mid = (left + right) // 2 # 这里必须是整除,应为索引没有小数
 if lst[mid] > n:
  right = mid - 1
 if lst[mid] < n:
  left = mid + 1
 if lst[mid] == n:
  print("找到这个数")
  break
else:
 print("没有这个数!")
# 递归来完成二分法
lst = [22, 33, 44, 55, 66, 77, 88, 99, 101, 238, 345, 456, 567, 678, 789]
def func(n,left,right):
 if left <= right:
  mid = (left + right) // 2
  if n > lst[mid]:
   left = mid + 1
   return func(n,left,right) # 递归,递归入口
  elif n < lst[mid]:
   right = mid - 1
   # 深坑,函数的返回值返回给调用者
   return func(n,left,right) # 递归
  elif lst[mid] == n:
   # print("找到了")
   return mid
 else:
  print("没找到")
  return -1 # 避免返回None
 
# 找66,左边界0,右边界len(lst) - 1
ret = func(66,0,len(lst) - 1)
print(ret)
# 递归二分法另一种形式,但是无法实现位置计算
lst = [22, 33, 44, 55, 66, 77, 88, 99, 101, 238, 345, 456, 567, 678, 789]
def func(lst,target):
 left = 0
 right = len(lst) - 1
 if left > right:
  print("没有这个数")
 middle = (left + right)//2
 if target < lst[middle]:
  return func(lst[:middle],target)
 elif target > lst[middle]:
  return func(lst[middle + 1:],target)
 elif target == lst[middle]:
  print("找到这个数了")
func(lst,101)

코어의 양단 떨어져 휴식이 반 가운데 한 컷을.
  두 알고리즘 : 기존의주기를, 재귀

# 时间复杂度最低, 空间复杂度最低
lst1 = [5,6,7,8]
 lst2 = [0,0,0,0,0,1,1,1,1]
 for el in lst1:
 lst2[el] = 1
 lst2[4] == 1 # o(1)

나는 모두가 매우 넓은 파이썬 학습 자원 수집을 권장하기 위해, 당신에 기록 입력을 클릭하여 공유 경험, 연구 노트로 학습하기 전에 수석 프로그래머가,이 사업 경험의 기회이며, 모두주의 깊게 파이썬 제로 구성에 프로젝트 전투에 대한 기본 정보, 최신 기술 파이썬에 당신에게 날, 전망, 작은 세부 사항의 메시지를 남겨 학습
요약
위의 것은 파이썬 익명 기능 / 정렬 기능 / 필터 기능 / 매핑 기능 / 순환 /을 소개하는 작은 시리즈 이분법, 내가 도와주고 싶어

게시 24 개 원래 기사 · 원 찬양 38 ·은 20000 +를 볼

추천

출처blog.csdn.net/haoxun10/article/details/104761625