Python で lambda 関数のリスト内包表記と zip 関数を使用するためのガイド

WBOY
リリース: 2016-06-16 08:41:41
オリジナル
1487 人が閲覧しました

ラムダ関数

Python は、単一行の最小限の関数をすばやく定義できる興味深い構文をサポートしています。ラムダと呼ばれるこれらの関数は Lisp から借用したもので、関数が必要な場合はどこでも使用できます。

def f(x): x*2 を返し、これをラムダ関数に置き換えると次のように記述できます: g = lambda x: x*2`g(3) 結果は 6.(lambda x: x*2) (3) 「同じ効果があります。」

これは、上記の通常の関数と同じことを行うラムダ関数です。ここでは構文が短いことに注意してください。パラメータ リストを括弧で囲んでおらず、return キーワードが省略されています (関数全体が 1 行のみであるため、これは暗黙的です)。また、関数には関数名がありませんが、変数
に代入することで呼び出すことができます。 ラムダ関数を使用する場合は、変数に代入する必要さえありません。これはおそらく世界で最も役立つものではなく、ラムダ関数が単なるインライン関数であることを示しているだけです。
一般に、ラムダ関数は任意の数のパラメーター (オプションのパラメーターを含む) を受け入れ、単一の式の値を返すことができます。ラムダ関数にはコマンドを含めることはできず、複数の式を含めることもできません。ラムダ関数に多くを詰め込みすぎないでください。より複雑な関数が必要な場合は、通常の関数を定義して、必要なだけ長くしてください。 私は特定の再利用不可能なコードをカプセル化する必要があり、大量の 1 行関数でコードが乱雑になるのを避ける必要がある場合にこれらを使用します。

リスト内包表記

簡単なコードを見てください

コードをコピー コードは次のとおりです:

testList = [1,2,3,4]
def mul2(x):
x*2 を印刷
[mul2(i) for i in testList]
[mul2(i) for i in testList if i%2==0]

多次元配列の初期化
multilist = [[range(5) の列は 0] range(3) の行は]

zip 関数

コードをコピー コードは次のとおりです:

>>> a = [1,2,3]
>>> b = [4,5,6]
>>> c = [4,5,6,7,8]
>>> zip = zip(a,b)
[(1, 4), (2, 5), (3, 6)]
>>> zip(a,c)
[(1, 4), (2, 5), (3, 6)]
>>> zip(*圧縮済み)
[(1, 2, 3), (4, 5, 6)]

学習リソース
学んだことを応用してください
1

コードをコピー コードは次のとおりです:

m = [[-1.0, 2.0/c-1, -2.0/c+1, 1.0],
[2.0、-3.0/c+1、3.0/c-2、-1.0]、
[-1.0, 0.0, 1.0, 0.0]、
[0.0, 1.0/c, 0.0, 0.0]]
乗算 = ラムダ x: x*c
m = [[multiply(m[col][row]) for range(4) の列] for row in range(4)]
print [[m[col][row] forcol in range(4)] for row in range(4)]

内容: m はパラメータ c を含む行列で、c*m の結果を計算します
しばらく考えた後、最後の文を

に変更しました

コードをコピー コードは次のとおりです:

print [[multiply(each) for each in row] for row in m] はよりPython的です

2 つの行列の乗算

学習リソース

コードをコピー コードは次のとおりです:

def 行列Mul(A, B):
res = [[0] * len(B[0]) for i in range(len(A))] for i in range(len(A)):
range(len(B[0])) 内の j の場合:
範囲 (len(B)) の k の場合:
res[i][j] += A[i][k] * B[k][j] return res
def 行列Mul2(A, B):
戻り値 [[sum(a * b for a, b in zip(a, b)) for b in zip(*B)] for a in A]

a = [[1,2], [3,4], [5,6], [7,8]]
b = [[1,2,3,4], [5,6,7,8]]
print mathMul(a,b) print mathMul(b,a) print "-"*90
print mathMul2(a,b) print mathMul2(b,a) print "-"*90
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート