
Pythonのコレクションは、1つまたはさまざまなタイプの値のセットを格納するプログラムオブジェクト(コンテナー変数)であり、これらの値にアクセスしたり、コレクションのタイプに依存する特別な関数やメソッドを適用したりできます。
コレクションを勉強する際の一般的な問題は、各タイプをある程度詳細に分析した後、通常、全体像の説明に十分な注意が払われず、タイプ間の明確な類似性と違いが得られないことです。 。
これはまさにこのシリーズの記事で解決しようとしている問題です-トレーニング資料で通常示されているように、異なるタイプのコレクションを比較するのではなく、異なるタイプのコレクションを比較してPythonで標準コレクションを操作するためのいくつかのアプローチを検討します。 さらに、初心者に困難や間違いを引き起こすいくつかのポイントに触れてみます。
誰のために
: Pythonを勉強していて、コレクションの初期アイデアをすでに持っており、彼らと協力し、体系化して知識を深めたい人のために、それらを完全なイメージに入れてください。
Python
の標準の組み込みコレクションデータ型
を検討します:リスト(リスト)、タプル(タプル)、文字列(ストリング)、セット(セット、フローズンセット)、辞書(辞書)。 collectionsモジュールからのコレクションは考慮されませんが、記事の多くはそれらの操作に適用できるはずです。
目次:
- コレクションの分類。
- コレクションを操作するための一般的なアプローチ。
- コレクションの一部の一般的な方法。
- コレクションを変換します 。
1.コレクションの分類
用語の説明:
インデックス付け -コレクションの各要素には独自のシリアル番号-インデックスがあります。 これにより、序数のインデックスで要素にアクセスし、スライス(「スライス」)を実行できます。インデックスに基づいて選択することでコレクションに参加できます。 これらの問題については、別の記事で詳しく説明します。
一意性 -コレクションの各要素は、その中に1回だけ見つかります。 これにより、使用されるデータ型が各要素に対して変更されないという要件が生じます。たとえば、リストをそのような要素にすることはできません。
コレクションの
可変性 -コレクションに新しいメンバーを追加したり、コレクションの作成後にそれらを削除したりできます。
辞書に関する注(dict):
2コレクションを操作するための一般的なアプローチ
分類を理解したら、タイプに関係なく標準コレクションでできることを検討してください(例ではリストと辞書ですが、これは考慮される他のすべての標準タイプのコレクションで機能します)。
2.1 print ()関数を使用したコレクション要素の印刷
print(my_list)
2.2 len ()関数を使用してコレクション内のメンバーの数を数える
print(len(my_list))
2.3 in演算子を使用してこのコレクションの要素の所有権を確認する
x in s-アイテムがコレクションsにある場合はTrueを返し、そうでない場合はFalseを返します
非所有権をチェックするオプションもあります
。xはsにあり
ません。実際には、前の式のブール値の前に否定だけが追加されます。
my_list = ['a', 'b', 'c', 'd', 'e', 'f'] print('a' in my_list)
辞書のオプションは、以下のコードから明らかです。
my_dict = {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5, 'f': 6} print('a' in my_dict)
カップルを確認できますか? できます!
print(('a',1) in my_dict.items())
文字列の場合、1文字だけでなく部分文字列も検索できます。
print('ab' in 'abc')
2.4 for inループですべてのコレクションアイテムをバイパスする
この場合、コレクションの要素は、すべての要素が列挙されるまでループを順番にループします。
for elm in my_list: print(elm)
次の点に注意してください。
2.5関数min ()、 max ()、 sum ()
- 関数min ()、 max ()-最小要素と最大要素をそれぞれ検索します-数値だけでなく、文字列値も機能します。
- sum ()-すべて数値の場合、すべての要素の合計。
print(min(my_list))
3部品コレクションの一般的な方法
同じタイプの問題を解決するために、コレクションタイプの多くのメソッドが複数のコレクションで使用されます。
UPD:3番目の記事の重要な追加:
可変コレクションへのアイテムの追加と削除 。
メソッドと例の説明:
- 。 count ()-一意でないコレクション(文字列、リスト、タプル)の特定の要素をカウントする方法。コレクションで要素が見つかった回数を返します。
my_list = [1, 2, 2, 2, 2, 3] print(my_list.count(2))
- 。 index ()-インデックス付きコレクション(文字列、リスト、タプル)に渡されたアイテムの最小インデックスを返します
my_list = [1, 2, 2, 2, 2, 3] print(my_list.index(2))
- 。 copy ()-メソッドは、コレクション(リスト、辞書、両方のタイプのセット)の浅い(再帰的ではない)コピーを返します。
my_set = {1, 2, 3} my_set_2 = my_set.copy() print(my_set_2 == my_set)
- 。 clear ()-コレクションからすべての要素を削除し、それを空のコレクションに変える可変コレクション(リスト、辞書、セット)のメソッド。
my_set = {1, 2, 3} print(my_set)
セットを比較するための特別な方法(set、frozenset)
- set_a。 isdisjoint (set_b)-set_aとset_bに共通の要素がない場合はtrue。
- set_b。 issubset (set_a)-set_bのすべての要素がset_aに属する場合、set_bは完全にset_aの一部であり、そのサブセットです(set_bはサブセットです)
- set_a。 issuperset (set_b)-それぞれ、上記の条件が真の場合、set_aはスーパーセットです
set_a = {1, 2, 3} set_b = {2, 1}
セットが等しい場合、それらは同時にサブセットとスーパーセットの両方になります。
print(set_a.issuperset(set_d))
4あるタイプのコレクションを別のタイプに変換する
課題に応じて、あるタイプのコレクションを別のタイプのコレクションに変換できます。 このため、原則として、あるコレクションを別のコレクションを作成する機能に転送するだけで十分です(上記の表にあります)。
my_tuple = ('a', 'b', 'a') my_list = list(my_tuple) my_set = set(my_tuple)
あるコレクションを別のコレクションに変換すると、データが失われる可能性があることに注意してください。
- セットには一意の要素のみが含まれているため、セットに変換すると、重複した要素は失われます! 実際、一意性の確認は通常、必要性のあるタスクで多く使用する理由です。
- インデックス付きコレクションをインデックスなしコレクションに変換すると、要素の順序に関する情報が失われ、場合によっては重要になることがあります!
- 不変の型に変換した後、コレクションの要素を変更することはできなくなります-新しい要素を削除、変更、追加します。 可変コレクションで動作するように記述されている場合、データ処理関数でエラーが発生する可能性があります。
追加の詳細:
- 上記の方法は、キーと値のペアで構成されているため、 ディクショナリの作成には機能しません。
この制限は、zip()を使用してキーと値を組み合わせた辞書を作成することで回避できます。
my_keys = ('a', 'b', 'c') my_values = [1, 2]
- 別のコレクションから行を作成します。
my_tuple = ('a', 'b', 'c') my_str = ''.join(my_tuple) print(my_str)
- 考えられる間違い :コレクションに変更可能な要素(リストのリストなど)が含まれている場合、その要素は変更可能であるため、変更不可能なコレクションに変換できません!
my_list = [1, [2, 3], 4] my_set = set(my_list)
注 :最も強力で柔軟な方法-コレクションジェネレーターは
、サイクルの4番目の部分で個別
に検討さ
れます。これは、詳細な分析にほとんど焦点を当てず、必要とするニュアンスやユースケースが多いためです。
UPD:
コメントの ShashkovSは、コレクションの操作のアルゴリズムの複雑さに関する重要で有用な情報へのリンクを投稿しました。
ディスカッションに招待します。
- 私がどこかで間違えたか、重要なことを考慮しなかった場合-コメントを書いてください。重要なコメントは、著者名を示す記事の後半に追加されます。
- 明確でない点があり、説明が必要な場合は、コメントに質問を書いてください。または、私または他の読者が答えを出すと、答えのある実用的な質問が後で記事に追加されます。