Pythonの無名関数は再帰的に()フィルタ()マップ()関数をソート

A、ラムダ()関数匿名

それがどこにある無名関数から、はっきりそれを置くためには、文字通り目に見えない機能であり、彼のパフォーマンスは見ることができませんでしたか?

実際には、クエリがいる限り、匿名関数が名前を書くようにと呼ばれる匿名の型付きラムダその種類は、我々はすべてと呼ばれるラムダとき

その後、我々は彼の使い方を見てみましょう

例えば、非常に単純な機能は、あなたはどのように書くと、乗のnを計算??

多くの人がこのような匿名関数を記述するために使用されていない場合

def func(n):
    return n**2
pinrt(func(5))

输出结果
25

このような書き込みは問題ありません

しかし、多くの場合、あなたは関数名が非常に痛みを伴うことがあるためという問題を知っているよ関数を書くが、非常に簡単な質問が、あなたがそれにすべての書式設定機能を従わなければならないときに実行する関数を記述する必要がありますそれを書くの書かれたシンプルかつ簡単な方法はありますか?

匿名関数を使用すると、この問題を解決することができます

私たちは書くことが以前に機能することができます

f = lambda(n :n**2)
print(f(5))

输出的结果
 25

しかし、唯一の1行が解決することができ、通話時間は直接使用する呼び出すことができます取る、それは非常に簡単ではありませんまた、匿名関数の結果であります

構文:関数名=ラムダ()パラメータ:戻り値

注意:

  1. 関数パラメータは、パラメータの離間用途コンマ複数の複数を有することができます

  2. 無名関数複雑どんなには、単一の行を書くことができます。データを直接カットロジックを返された後、

  3. 戻り値と正常な機能は、データの任意のタイプであってもよいです

二.sorted()

ソート機能。

语法:ソート(反復処理可能な、キー=なし、逆=偽)

反復可能:照合(ソート機能)、内部の各要素は、計算の結果のソート関数に関数に渡されたソート反復オブジェクトパラメータであろう。

リバース:それはフラッシュバックであるかどうか、真;フラッシュバックは、偽正シーケンス

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:579817333 
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
lst = [1,5,3,4,6]
lst2 = sorted(lst)
print(lst)
print(lst2) 

输出结果

[1,5,3,4,6]
[1,3,4,5,6]

辞書は、同じ戻り値がソート済みキーです

機能と組み合わせることで

そのようなAの質問がある場合は、に応じて単語の長さにソートリストましょう

lst = ["马化腾","马云","波多野结衣","海"]
def fun(s):
    return len(s)

print(sorted(lst, key= func))

输出结果
['海', '马云', '马化腾', '波多野结衣']

もちろん、隠された機能の私たちの以前の研究に基づいて記述することができ

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:579817333 
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
def fun (s)
    return len(s)
print(sorted(lst , key = lambda s : len(s)))
lst = ["马化腾","马云","波多野结衣","海"]

输出结果

['海', '马云', '马化腾', '波多野结衣']

三.filter()

フィルタ機能

構文:フィルター(機能反復処理可能。)
機能:機能はフィルタでスクリーニングに自動的に機能を反復可能に要素を通過し、あなたがトゥーレまたはFalseを返した機能に応じて、このデータを保持するかどうかを判断します。

反復可能:反復可能オブジェクト

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))    

四。地図()

マッピング機能

構文:マップ(関数、反復可能)をマッピングすることができるイテラブル各要素は、機能を実行します。

新しいリストを返し、リストの各要素の二乗を計算します

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:579817333 
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
def fun(s)
    return s**2
mp = map(fun,[1,2,3,4,5])
print (mp)
print(list(mp))

输出结果

<map object at 0x000002990C24DE10>
[1, 4, 9, 16, 25]

ラムダに書き換えます()

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

結果は同じ出力であります

リストとデータの両方ディエゴの計算と同じ位置

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

输出结果

[3, 7, 11, 10, 9]

V.の再帰

自身が再帰的な関数で関数を呼び出します

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

1000までのPythonの深さの再帰しかし、一般的には1000年に最大998の周りにではありません

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

输出结果
...
998Traceback (most recent call last):
RecursionError: maximum recursion depth exceeded while calling a Python object
报错

再帰的に適用されます:

私たちは、あなたがすべてのドキュメントのファイルをトラバースする再帰を使用することができ、そのような私たちのファイルシステムとして、ツリーのさまざまなトラバースする再帰を使用することができます

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:579817333 
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
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)

二分法検索

バイナリは、非常に高いデータ検索効率の半分を除外することができるたびに検索していますが、バイナリ検索を使用する前に、比較的大きいの制限は、シーケンスを注文する必要があります。

要件:シーケンスが順序付けられたシーケンスで見つけなければなりません。

# 判断n是否在lst中出现. 如果出现请返回n所在的位置
# ⼆二分查找---⾮非递归算法
lst = [22, 33, 44, 55, 66, 77, 88, 99, 101, 238, 345, 456, 567, 678, 789]
n = 567
left = 0
right = len(lst) - 1
count = 1
while left <= right:
  middle = (left + right) // 2
  if n < lst[middle]:
    right = middle - 1
  elif n > lst[middle]:
    left = middle + 1
  else:
    print(count)
    print(middle)
    break
  count = count + 1
else:
  print("不不存在")
# 普通递归版本⼆二分法
def binary_search(n, left, right):
  if left <= right:
    middle = (left+right) // 2
    if n < lst[middle]:
      right = middle - 1
  elif n > lst[middle]:
    eft = middle + 1
  else:
    return middle
return binary_search(n, left, right) # 这个return必须要加. 否则接收
到的永远是None.
  else:
    return -1
print(binary_search(567, 0, len(lst)-1))
# 另类⼆二分法, 很难计算位置.
def binary_search(ls, target):
  left = 0
  right = len(ls) - 1
  if left > right:
    print("不不在这⾥里里")
  middle = (left + right) // 2
  if target < ls[middle]:
    return binary_search(ls[:middle], target)
  elif target > ls[middle]:
    return binary_search(ls[middle+1:], target)
  else:
    print("在这⾥里里")
binary_search(lst, 567)
公開された706元の記事 ウォンの賞賛731 ビュー101万+

おすすめ

転載: blog.csdn.net/sinat_38682860/article/details/103960858