Pythonデータ構造
データ構造はプログラミングに不可欠です。これらは、アクセスと変更を効率的に行う方法でデータを整理、保存、および管理するために使用されます。
毎週の洗濯を想像してみてください。理想的には、靴下、Tシャツ、ズボン、デリケートを別々の引き出しに分けて、朝出かける前に簡単にアクセスできるようにします。データ構造の準備をしています。さて、これらの持ち物をすべて、整理せずに1つの引き出しまたは複数の引き出しの中に投げ込むことを想像してみてください。あなたは仕事や夜の外出のためにまともになるのにどれくらい時間がかかると思いますか?これは、データ構造なしで準備を進めています。
この記事では、Pythonが提供する組み込みのデータ構造について詳しく説明します。
Pythonに組み込まれたデータ構造
Pythonに組み込まれているデータ構造には、リスト、辞書、タプル、セットが含まれます。
リスト
リストは変更可能な(変更可能な)データ構造であり、異なる要素または部分を持つことができます。つまり、1つのリストにさまざまな異なるデータ型を含めることができます。
list = ['string', 300, (2, 4), 'that previous data type was a tuple']
リストのデータ構造には、リスト自体を追加、削除、または操作するために使用される11のメソッドがあります。
リストへの要素の追加
- append():append()メソッドは、単一のアイテムをリストに追加します
list = ['string, next is tupel', (2, 1), 3] list.append(500) print(list) # prints ['string, next is tupel', (2, 1), 3, 500]
- extend():extend()メソッドは、iterableのすべての項目によってリストを追加します。これは、append()と次の点で異なります。
list = ['string, next is tupel', (2, 1), 3] list.append((8, 9)) print(list) # prints ['string, next is tupel', (2, 1), 3, (8, 9)] # Notice that append() leave (8, 9) as a tuple
list = ['string, next is tupel', (2, 1), 3] list.extend((8, 9)) print(list) # prints ['string, next is tupel', (2, 1), 3, 8, 9] # Notice that extend() did not leave (8, 9) as a tuple
- insert():insert()メソッドは、指定された位置またはインデックスにアイテムを挿入します。最初の引数は挿入する必要のある要素のインデックスであり、2番目の引数は要素自体です。
list = ['string, next is tupel', (2, 1), 3] list.insert(0, 700) print(list) # prints [700, 'string, next is tupel', (2, 1), 3] # inserted 700 in the 0 index
リストからの要素の削除
- remove():remove()メソッドは、指定された値を含むリストの最初の項目を削除します。
list = ['string, next is tupel', (2, 1), 3, 8, 3] list.remove(3) print(list) # prints ['string, next is tupel', (2, 1), 8, 3]
- pop():pop()メソッドは、指定された位置の値を削除しますが、インデックスが指定されていない場合は、最後のアイテムを削除します。
list = ['string, next is tupel', (2, 1), 3] list.pop(0) print(list) # prints [(2, 1), 3]
list = ['string, next is tupel', (2, 1), 3] list.pop() print(list) # prints ['string, next is tupel', (2, 1)]
- clear():clear()メソッドは引数を取りません。リストからすべてのアイテムを削除します。
list = ['string, next is tupel', (2, 1), 3] list.clear() print(list) # prints []
その他のリストメソッド
- index():index()メソッドは、指定された値のインデックスを返します。
list = [8, 20, 1, 9, 2, 3, 937, 0] print(list.index(9)) # prints 3
- count():count()メソッドは、リストに値が出現する回数をカウントします。
list = [8, 20, 1, 8, 2, 8, 937, 8] print(list.count(8)) # prints 4
- sort():sort()メソッドは、引数の有無にかかわらず使用でき、並べ替えのカスタマイズに使用できます。
list = [8, 20, 1, 9, 2, 3, 937, 0] list.sort() print(list) # prints [0, 1, 2, 3, 8, 9, 20, 937]
list = [8, 20, 1, 9, 2, 3, 937, 0] list.sort(reverse= True) print(list) # prints [937, 20, 9, 8, 3, 2, 1, 0]
- reverse():reverseメソッドは、カスタマイズされた並べ替え引数を使用する上記のsortメソッドと同様に、リストの要素を元の場所に戻します。
list = [8, 20, 1, 9, 2, 3, 937, 0] list.reverse() print(list) # prints [0, 937, 3, 2, 9, 1, 20, 8]
- copy():copy()メソッドは、単にリストのコピーを返します。
list = [8, 20, 1, 9, 2, 3, 937, 0] list.copy() print(list) # prints [8, 20, 1, 9, 2, 3, 937, 0]
タプル
タプルは括弧内に保持されたデータです。リストとは異なり、それらは変更可能ではなく(つまり、変更することができません)、リストよりも高速です。それらは不変であるため、辞書のキーとしても使用できます。タプルは、関数から複数の結果を返したい場合にも使用できます。
連結を使用して、データをタプルに追加できます。
参加者の81%は、ブートキャンプに参加した後、自分たちの技術的な仕事の見通しについてより自信を持っていると述べました。今日のブートキャンプにマッチしましょう。
平均的なブートキャンプの卒業生は、ブートキャンプの開始から最初の仕事を見つけるまで、キャリアの移行に6か月も費やしませんでした。
tuple = (1, 2, 3) print(tuple) # prints (1, 2, 3) tuple = tuple + (4, 5, 6) print(tuple) # prints (1, 2, 3, 4, 5, 6)
辞書
ディクショナリは、JavaScriptのオブジェクトのようなキーと値のペアを保持するデータ構造です。リストと同様に、これらのデータ構造は変更可能です。つまり、データを変更できます。
キーと値のペアの例は、人の特性とそれらの特性の説明です。名前、年齢、身長、体重をすべてキーにすることができます。 Josh、33、5’10、180 lbsは、すべてこれらのキーの値になります。
dict = {'name': 'Josh', 'age': 33, 'height': "5'10", 'weight': '180 lbs' }
辞書は変更可能であるため、「Josh」を別の名前に変更できます。
dict = {'name': 'Josh', 'age': 33, 'height': "5'10", 'weight': '180 lbs' } dict['name'] = 'Patrick' print(dict) # prints {'name': 'Patrick', 'age': 33, 'height': "5'10", 'weight': '180 lbs'}
新しいキーと値のペアを作成することで、値を追加できます。
dict = {'name': 'Josh', 'age': 33, 'height': "5'10", 'weight': '180 lbs' } dict['location'] = 'San Francisco' print(dict) # prints {'name': 'Josh', 'age': 33, 'height': "5'10", 'weight': '180 lbs', 'location': 'San Francisco'}
delキーワード、pop()、またはpopitem()メソッドを使用して、辞書内のキーと値のペアを削除することもできます。辞書ではpop()が引数を取る必要があるため、辞書の最後のキーと値のペアから削除するにはpopitem()が必要であることに注意してください。
dict = {'name': 'Josh', 'age': 33, 'height': "5'10", 'weight': '180 lbs' } del dict['name'] print(dict) # prints {'age': 33, 'height': "5'10", 'weight': '180 lbs'}
dict = {'name': 'Josh', 'age': 33, 'height': "5'10", 'weight': '180 lbs' } dict.pop('name') print(dict) # prints {'age': 33, 'height': "5'10", 'weight': '180 lbs'}
dict = {'name': 'Josh', 'age': 33, 'height': "5'10", 'weight': '180 lbs' } dict.popitem() print(dict) # prints {'name': 'Josh', 'age': 33, 'height': "5'10"}
キーのみ、または辞書の値のみを印刷することもできます。
dict = {'name': 'Josh', 'age': 33, 'height': "5'10", 'weight': '180 lbs' } print(dict.keys()) # prints dict_keys(['name', 'age', 'height', 'weight'])
dict = {'name': 'Josh', 'age': 33, 'height': "5'10", 'weight': '180 lbs' } print(dict.values()) # prints dict_values(['Josh', 33, "5'10", '180 lbs'])
キーと値のペアとして出力するには、items()メソッドを使用できます。
dict = {'name': 'Josh', 'age': 33, 'height': "5'10", 'weight': '180 lbs' } print(dict.items()) # prints dict_items([('name', 'Josh'), ('age', 33), ('height', "5'10"), ('weight', '180 lbs')])
セット
セットは、一意の要素の変更可能な順序付けられていないコレクションです。つまり、重複する要素は含まれません。セットは、両方とも中括弧で囲まれたデータを保持するという点で辞書のように見えますが、辞書とは異なり、セットにはキーと値のペアがありません。
set = {1, 2, 2, 2, 3, 3, 4, 4} print(set) # prints {1, 2, 3, 4}
add()メソッドを利用して、セットに要素を追加できます。
set = {1, 2, 2, 2, 3, 3, 4, 4} set.add(5) print(set) # print {1, 2, 3, 4, 5}
セットを使用するときに使用できる他の4つのメソッド、union()、intersection()、difference()、およびsymmetric_difference()があります。
- union():union()メソッドは、2つの差分セットを統合し、両方の共通点を取得して、重複のない単一のセットとして生成します。
set = {1, 2, 2, 2, 3, 3, 4, 4} set.add(5) print(set) # prints {1, 2, 3, 4, 5} anotherSet = {3, 3, 4, 4, 5, 5, 6} print(set.union(anotherSet)) # prints {1, 2, 3, 4, 5, 6}
- intersection():intersectionメソッドは、両方のセットで共通の要素を検索します。
set = {1, 2, 2, 2, 3, 3, 4, 4} set.add(5) print(set) # prints {1, 2, 3, 4, 5} anotherSet = {3, 3, 4, 4, 5, 5, 6} print(set.intersection(anotherSet)) # prints {3, 4, 5}
- difference():differenceメソッドは、すべての共通点を取り出し、最初のセットから残っているものを出力するという点で、intersectionメソッドの反対を行います。
set = {1, 2, 2, 2, 3, 3, 4, 4} set.add(5) print(set) # prints {1, 2, 3, 4, 5} anotherSet = {3, 3, 4, 4, 5, 5, 6} print(set.difference(anotherSet)) # prints {1, 2}
- symmetric_difference():symmetric_difference()メソッドは、出力の両方のセットの差を取得することを除いて、differenceメソッドと同じです。
set = {1, 2, 2, 2, 3, 3, 4, 4} set.add(5) print(set) # prints {1, 2, 3, 4, 5} anotherSet = {3, 3, 4, 4, 5, 5, 6} print(set.symmetric_difference(anotherSet)) # prints {1, 2, 6}
-
データ構造の隣接リスト
グラフは非線形のデータ構造です。これは、ノードを使用したデータと、エッジを使用したそれらの関係を表します。グラフGには2つのセクションがあります。頂点とエッジ。頂点はセットVを使用して表され、エッジはセットEとして表されます。したがって、グラフ表記はG(V、E)です。アイデアを得るための1つの例を見てみましょう。 このグラフには、5つの頂点と5つのエッジがあります。エッジが方向付けられます。例として、頂点BとDを接続するエッジを選択した場合、ソース頂点はBで、デスティネーションはDです。したがって、BをDに移動することはできますが、DからBに移動することはできません。 グラフは非線形
-
Redisデータ構造
Redisを初めて使用する場合でも、利用可能な機能の復習が必要な場合でも、このガイドは、Redisが提供するすべてのデータ構造を理解するのに役立ちます。 適切な構造を選択 Redisのデータ構造は単純です。解決しようとしている問題に完全に一致するものはないでしょう。ただし、データに適切な初期構造を選択すると、Redisコマンドを使用して必要なものを効率的に取得することができます。多くのRedisコマンドには、使用する予定の基になるデータ構造のタイプを示すプレフィックスが付いています。 汎用データ構造 プレフィックス 用途 警告とよくある誤用 ハッシュ H オブジェクトストレージ