Pythonを学んで、リストの式からzip()関数まで、この5つの技巧は知るべきです!

4362 ワード

最初にPythonを学んだとき、私がこれらの方法をマスターできれば、コードはもっと美しく見えます.本稿では,著者らは5つの方法を紹介し,入門段階ではまだよく知られていないかもしれないが,実戦ではこの5つのテクニックが非常に実用的である.以下に、5つの実用的なテクニックを示します.
  • 文字列演算
  • リスト導出式
  • lambdaとmap()
  • 単一行条件文
  • zip()

  • 文字列演算
    文字列は本質的にメタグループでもあるが、文字列には多くの「演算」方式がある.最も直感的なのは、接続と重複を表す文字列の+演算と*演算です.
    my_string = "Hi Medium..!"
    print(my_string * 2)
    print(my_string + " I love Python" * 2)
    

    また、逆文字列を取得する場合は、[:-1]を直接使用してインデックスを作成することもできます.
    >>> print(my_string[::-1])
    

    リスト要素が文字列である場合、join()メソッドを使用してすべての要素をすばやく結合できます.
    >>> word_list = ["awesome", "is", "this"]
    >>> print(' '.join(word_list[::-1]) + '!')
    this is awesome!
    

    リスト導出式
    リストの導出式がまだ使えないなら、早く勉強しましょう.本稿の著者が述べたように、「私が初めてこの方法を学んだとき、私の世界は変わった」.リスト導出式は本当に強力で、一般的な方法よりも速度が速いだけでなく、直感性、可読性が非常に強い.反復リストで演算をしたい場合は、早く使用しましょう.
    まず、変数の平方を計算し、5を加算する簡単な関数を定義します.
    >>> def stupid_func(x):
    >>>    return x**2 + 5
    

    この関数をリスト内の奇数項に適用したい場合は、リスト導出式を使用しない場合は、一般的に以下の形式に書きます.
    >>> my_list = [1, 2, 3, 4, 5]
    >>> new_list = []
    >>> for x in my_list:
    >>>    if x % 2 != 0:
    >>>        new_list.append(stupid_func(x))
    >>> print(new_list)
    

    しかし、リストの導出式があります.上のコードは、次のように等価に変更できます.
    >>> my_list = [1, 2, 3, 4, 5]
    >>> print([stupid_func(x) for x in my_list if x % 2 != 0])
    

    リスト導出式の一般的な構文は[ expression for item in list ]として表すことができ、ブール型条件文をいくつか追加したい場合は、上の構文は[ expression for item in list if conditional ]に変更することができ、その構造は実際には下と等価である.
    >>> for item in list:
    >>>    if conditionnal:
    >>>        expression
    

    上記のリスト導出式は、新しい関数を定義する必要がないことをさらに簡略化することができる.
    >>> print([x ** 2 + 5 for x in my_list if x % 2 != 0])
    

    LambdaとMap
    Lambdaは匿名の関数で、少し変に見えるかもしれませんが、それを理解すると、彼は非常に直感的で強くなります.
    一般的にLambda関数は小さく、関数名を定義する必要もありません.では、なぜ匿名関数が必要なのでしょうか.簡単に言えば、Lambdaは最も直感的な演算を実行し、標準的な関数定義を必要とせず、新しい関数名を再呼び出す必要もありません.
    それとも上の平方に5を加えた例で、前に標準的な関数を定義しました.def stupid_func(x)、Lambda匿名関数を試してみましょう.
    >>> stupid_func = (lambda x : x ** 2 + 5)
    print([stupid_func(1),stupid_func(3),stupid_func(5)])
    

    では、なぜ上の式を使うのでしょうか.多くの理由は、単純な演算を実行したい場合、実際の関数を定義する必要がなくても完了できるからです.たとえば、リスト要素をソートするには、sorted()メソッドを直感的に使用できます.
    >>> my_list = [2, 1, 0, -1, -2]
    >>> print(sorted(my_list))
    

    これは、デフォルトでは大きいものから小さいもの、または小さいものから大きいものまでしかソートできませんが、Lambda式を使用すると、より自由なソート基準を実現できます.以下に示すように、Lambda関数定義キーを使用してsorted()メソッドをどのようにソートするかを示す最小二乗数に基づいてリストをソートしたい.
    >>> print(sorted(my_list, key = lambda x : x ** 2))
    

    Mapは、リストなどの他のシーケンス要素に関数を適用できる簡単な関数です.2つのリストがある場合、この2つのリストに対応する要素を乗算したい場合は、lambda関数とmapを使用して、この機能を迅速に実現できます.
    >>> print(list(map(lambda x, y : x * y, [1, 2, 3], [4, 5, 6])))
    

    上のコードは非常に優雅で、両方を使わなければ、一般的な表現はこのように書く必要があります.
    x,y = [1,2,3],[4,5,6]
    z = []
    for i in range(len(x)):
        z.append(x[i] * y[i])
    print(z)
    

    シングルライン条件文
    条件文を使用すると、次のように書くことができます.
    x = int(input())
    if x >= 10:
        print('Horse')
    elif 1 < x < 10:
        print("Duck")
    else:
        print("Baguette")
    

    しかし、すべての条件をprint関数に書くこともできます.つまり、上の7行のコードは以下の行に等価に書くことができます.
    print("Horse" if x >= 10 else "Duck" if 1 < x < 10 else "Baguette")
    

    これは本当に簡潔に見えますが、以前書いたコードを見ると、本当にこのような表現に変えることができます.
    zip()
    前にmap()関数を紹介したとき,ある関数を平行な2つのリストに適用する例を示したが,zip()関数はこれをより簡単に行うことができる.2つのリストがある場合、1つ目のリストには名前が含まれ、2つ目のリストには姓が含まれています.zip()関数を使用すると、次のように結合できます.
    first_names = ["Peter", "Christian", "Klaus"]
    last_names = ["Jensen", "Smith", "Nistrup"]
    
    print([' '.join(x) for x in zip(first_names,last_names)])
    
    

    すなわち、zipは、2つの等長のリストを1対1のペアに変更する.
     (("Peter", "Jensen"), ("Christian", "Smith"), ("Klaus", "Nistrup"))。
    

    End.
    転載整理ソース:https://mp.weixin.qq.com/s/4KjbrKtZhq-bTcHzwGRDwA微信公衆番号:データ分析1480