Pythonトリック操作:リストを接続する8つの方法

Python言語には多くの(そしてますます多くの)高度な機能があり、Python愛好家の間で非常に人気があります。これらの人々の目には、通常の開発者が理解できない高度な機能を書くことができるのは、マスターと神です。

しかし、チームワークでは、スキルを披露することはタブーであることを知っておく必要があります。

なんでそんなこと言うの?私の意見について話させてください:

  1. コードが単純でロジックが明確であるほど、エラーが発生しにくくなります。
  2. チームワークでは、コードはあなただけで維持されるのではなく、コードのロジックを読んだり理解したりするコストを削減することは良い道徳です。
  3. 単純なコードは最も基本的な構文シュガーのみを使用し、複雑な高度な機能にはより多くの依存関係があります(言語バージョンなど)

この記事は「ヒョンテクノロジーシリーズ」の第3弾です。このシリーズでは、私が見た驚くべき操作を要約して数えます。ここで、Python愛好家であれば、いくつかのクールなコーディングスキルを学ぶことができます。同時に、これらのコンテンツを読むと、他の人のコードを読むのに役立つ場合があります。

1.最も直感的な追加

+複数のリストを使用することが追加されています。

>>> list01 = [1,2,3]
>>> list02 = [4,5,6]
>>> list03 = [7,8,9]
>>>
>>> list01 + list02 + list03
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> 

2.itertoolsを使用

Itertoolsには、Pythonに非常に強力な組み込みモジュールがあり、反復可能なオブジェクトを操作するために特に使用されます。

前回の記事でも紹介しましたが、itertools.chain()関数first iterable(この場合はリスト)を使用して直列に接続し、より大きなiterableを形成します。

最後に、listを使用してリストに変換します。

>>> from itertools import chain
>>> list01 = [1,2,3]
>>> list02 = [4,5,6]
>>> list03 = [7,8,9]
>>>
>>> list(chain(list01, list02, list03))
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>>

3. *を使用して開梱します

パイソンxuanjiオペレーション(02):合成辞書7つの方法は、使用が挙げ**解凍辞書とすることができます。

そしてそれは同様で*、リスト解凍することを使用します。*また**、関数が定義されているときに使用され、変数パラメーターが提供されます。

今では、複数のリストをマージするために別々に使用しています。

例は次のとおりです。

>>> list01 = [1,2,3]
>>> list02 = [4,5,6]
>>>
>>> [*list01, *list02]
[1, 2, 3, 4, 5, 6]
>>>

4.拡張を使用します

辞書では、updateを使用してインプレース更新を実現し、リストでは、extendを使用してリストの自己拡張を実現します。

>>> list01 = [1,2,3]
>>> list02 = [4,5,6]
>>>
>>> list01.extend(list02)
>>> list01
[1, 2, 3, 4, 5, 6]

5.リスト内包表記を使用する

Pythonでリスト、セット、および辞書を生成する非常にPythonの方法があります。

これらは、リスト内包表記、セット内包表記、および辞書内包表記であり、通常はPython愛好家のお気に入りです。それで、今日のトピック:リストのマージ、リスト内包表記はまだ有能ですか?

もちろん、具体的なサンプルコードは次のとおりです。

>>> list01 = [1,2,3]
>>> list02 = [4,5,6]
>>> list03 = [7,8,9]
>>>
>>> [x for l in (list01, list02, list03) for x in l]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>>

6.heapqを使用する

HeapqはPythonの標準モジュールであり、ヒープソートアルゴリズムの実装を提供します。

このモジュールには、以下に示すように、複数のリストをマージするために使用できるマージメソッドがあります。

>>> list01 = [1,2,3]
>>> list02 = [4,5,6]
>>> list03 = [7,8,9]
>>>
>>> from heapq import merge
>>>
>>> list(merge(list01, list02, list03))
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> 

複数のリストをマージすることに加えて、heapq.mergeは最終的にマージされたリストもソートすることに注意してください。

>>> list01 = [2,5,3]
>>> list02 = [1,4,6]
>>> list03 = [7,9,8]
>>> 
>>> from heapq import merge
>>> 
>>> list(merge(list01, list02, list03))
[1, 2, 4, 5, 3, 6, 7, 9, 8]
>>> 

その効果は、次のコード行と同等です。

sorted(itertools.chain(*iterables))

常に順序付けられたリストを取得したい場合は、heapq.mergeを初めて考えてください。これは、非常に効率的なヒープソートを使用しているためです。ただし、ソートされたリストを取得したくない場合は、使用しないでください。

7.魔法の方法の助けを借りて

前回の記事では、魔法の方法が完全に紹介されました。

理解しやすいPythonマジックメソッドの非常に包括的なガイド(パート1)

理解しやすいPythonマジックメソッドの非常に包括的なガイド(パート2)

魔法の方法があるがあり__add__、我々は実際に働く第一の方法list01 + list02内部を使用する場合、実際には、__add__この魔法の方法で。

したがって、次の2つの方法は実際には同等です

>>> list01 = [1,2,3]
>>> list02 = [4,5,6]
>>> 
>>> list01 + list02
[1, 2, 3, 4, 5, 6]
>>> 
>>> 
>>> list01.__add__(list02)
[1, 2, 3, 4, 5, 6]
>>> 

この魔法の機能を借りて、このメソッドを減らして複数のリストをマージすることができます。サンプルコードは次のとおりです。

>>> list01 = [1,2,3]
>>> list02 = [4,5,6]
>>> list03 = [7,8,9]
>>>
>>> from functools import reduce
>>> reduce(list.__add__, (list01, list02, list03))
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>>

8.からの歩留まりを使用します

非常に初期の記事(コンカレントプログラミング08 @構文からのイールドの詳細な理解)で、イールドの意味と使用法を詳細に紹介しました。

からのyieldの後、反復可能なオブジェクトを追跡して、各要素を反復して返すことができます。

したがって、次のように、マージされたリストのツール関数をカスタマイズできます。

>>> list01 = [1,2,3]
>>> list02 = [4,5,6]
>>> list03 = [7,8,9]
>>>
>>> def merge(*lists):
...   for l in lists:
...     yield from l
...
>>> list(merge(list01, list02, list03))
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>>

多数(300)のイラスト含まれているオリジナルの「PyCharmChinese Guide」e-bookをお勧めします。これはよくできていて、すべてのPythonエンジニアによるコレクションに値します。

アドレスは次のとおりです:http//pycharm.iswbm.com

おすすめ

転載: blog.csdn.net/weixin_36338224/article/details/109037074