Python3のリストを理解する

提供:Dev Guides
移動先:案内検索

序章

list は、Pythonのデータ構造であり、変更可能または変更可能な順序付けられた要素のシーケンスです。 リスト内にある各要素または値は、アイテムと呼ばれます。 文字列が引用符で囲まれた文字として定義されているのと同様に、リストは角かっこ[ ]で囲まれた値で定義されます。

リストは、関連する多くの値を処理する場合に使用すると便利です。 これらを使用すると、一緒に属するデータをまとめ、コードを凝縮し、複数の値に対して同じメソッドと操作を一度に実行できます。

コレクションの種類であるPythonリストやその他のデータ構造について考えるときは、コンピューターにあるさまざまなコレクション(ファイルの品揃え、曲のプレイリスト、ブラウザーのブックマーク、電子メール、ビデオのコレクション)をすべて検討すると便利です。ストリーミングサービスなどにアクセスできます。

前提条件

Python 3をインストールし、コンピューターまたはサーバーにプログラミング環境をセットアップする必要があります。 プログラミング環境をセットアップしていない場合は、ローカルプログラミング環境またはサーバー上のプログラミング環境のインストールおよびセットアップガイドを参照して、オペレーティングに適したものにすることができます。システム(Ubuntu、CentOS、Debianなど)

文字列リスト

開始するには、文字列データ型の項目を含むリストを作成しましょう。

情報:このチュートリアルのサンプルコードに従うには、python3コマンドを実行して、ローカルシステムでPythonインタラクティブシェルを開きます。 次に、>>>プロンプトの後に例を追加して、例をコピー、貼り付け、または編集できます。


sea_creatures = ['shark', 'cuttlefish', 'squid', 'mantis shrimp', 'anemone']

リストを印刷すると、出力は作成したリストとまったく同じように応答します。

print(sea_creatures)
Output['shark', 'cuttlefish', 'squid', 'mantis shrimp', 'anemone']

要素の順序付けられたシーケンスとして、リスト内の各アイテムは、インデックス付けによって個別に呼び出すことができます。 リストは小さな部分で構成される複合データ型であり、値を追加、削除、および変更できるため、非常に柔軟性があります。 多くの値を格納したり、値を反復処理したりする必要があり、それらの値を簡単に変更できるようにしたい場合は、リストデータ型を使用することをお勧めします。

このチュートリアルでは、Pythonでリストを操作する方法をいくつか紹介します。

インデックスリスト

リスト内の各項目は、インデックス番号0から始まる整数値であるインデックス番号に対応しています。

リストsea_creaturesの場合、インデックスの内訳は次のようになります。

'鮫' 「イカ」 'いか' 「シャコ」 「アネモネ」
0 1 2 3 4

最初の項目である文字列'shark'はインデックス0で始まり、リストはインデックス4で項目'anemone'で終わります。

Pythonリストの各アイテムには対応するインデックス番号があるため、他のシーケンシャルデータ型と同じ方法でリストにアクセスして操作できます。

これで、インデックス番号を参照して、リストの個別のアイテムを呼び出すことができます。

print(sea_creatures[1])
Outputcuttlefish

このリストのインデックス番号は、上の表に示すように、0から4の範囲です。 したがって、アイテムのいずれかを個別に呼び出すには、次のようなインデックス番号を参照します。

sea_creatures[0] = 'shark'
sea_creatures[1] = 'cuttlefish'
sea_creatures[2] = 'squid'
sea_creatures[3] = 'mantis shrimp'
sea_creatures[4] = 'anemone'

インデックス番号が4より大きいリストsea_creaturesを呼び出すと、有効ではなくなるため、範囲外になります。

print(sea_creatures[18])
OutputIndexError: list index out of range

正のインデックス番号に加えて、-1から始まるリストの最後から逆方向にカウントすることにより、負のインデックス番号を持つリストのアイテムにアクセスすることもできます。 これは、リストが長く、リストの最後にアイテムを特定したい場合に特に便利です。

同じリストsea_creaturesの場合、負のインデックスの内訳は次のようになります。

'鮫' 「イカ」 'いか' 「シャコ」 「アネモネ」
-5 -4 -3 -2 -1

したがって、アイテム'squid'の負のインデックス番号を使用して印刷する場合は、次のように実行できます。

print(sea_creatures[-3])
Outputsquid

+演算子を使用して、リスト内の文字列アイテムを他の文字列と連結できます。

print('Sammy is a ' + sea_creatures[0])
OutputSammy is a shark

インデックス番号0の文字列アイテムを文字列'Sammy is a 'と連結することができました。 +演算子を使用して、2つ以上のリストを連結することもできます。

リスト内のアイテムに対応するインデックス番号を使用すると、リストの各アイテムに個別にアクセスして、それらのアイテムを操作できます。

リスト内のアイテムの変更

インデックス番号を別の値に設定することで、インデックスを使用してリスト内のアイテムを変更できます。 これにより、リストに含まれるアイテムを変更および更新できるため、リストをより細かく制御できます。

インデックス1のアイテムの文字列値を'cuttlefish'から'octopus'に変更する場合は、次のように変更できます。

sea_creatures[1] = 'octopus'

sea_creaturesを印刷すると、リストは異なります。

print(sea_creatures)
Output['shark', 'octopus', 'squid', 'mantis shrimp', 'anemone']

代わりに負のインデックス番号を使用して、アイテムの値を変更することもできます。

sea_creatures[-3] = 'blobfish'
print(sea_creatures)
Output['shark', 'octopus', 'blobfish', 'mantis shrimp', 'anemone']

これで、'blobfish''squid'-3の負のインデックス番号(2の正のインデックス番号に対応)に置き換えました。

リスト内のアイテムを変更できることで、効率的な方法でリストを変更および更新することができます。

スライスリスト

リストからいくつかの項目を呼び出すこともできます。 sea_creaturesの真ん中のアイテムのみを印刷したい場合、スライスを作成することで印刷できます。 スライスを使用すると、コロン[x:y]で区切られたインデックス番号の範囲を作成することにより、複数の値を呼び出すことができます。

print(sea_creatures[1:4])
Output['octopus', 'blobfish', 'mantis shrimp']

[1:4]のようにスライスを作成する場合、最初のインデックス番号はスライスの開始位置(包括的)であり、2番目のインデックス番号はスライスの終了位置(排他的)です。これが、上記の例の項目の理由です。位置では、12、および3が印刷されるアイテムです。

リストのいずれかの端を含める場合は、list[x:y]構文の数値の1つを省略できます。 たとえば、リストの最初の3つのアイテムsea_creatures'shark''octopus''blobfish')を印刷する場合は、これを行うことができます。次のように入力します。

print(sea_creatures[:3])
Output['shark', 'octopus', 'blobfish']

これにより、リストの先頭が印刷され、インデックス3の直前で停止しました。

リストの最後にすべての項目を含めるには、構文を逆にします。

print(sea_creatures[2:])
Output['blobfish', 'mantis shrimp', 'anemone']

正のインデックス番号と同様に、リストをスライスするときに負のインデックス番号を使用することもできます。

print(sea_creatures[-4:-2])
print(sea_creatures[-3:])
Output['octopus', 'blobfish']
['blobfish', 'mantis shrimp', 'anemone']

スライスで使用できる最後のパラメーターはstrideと呼ばれ、リストから最初のアイテムが取得された後に進むアイテムの数を示します。 これまでのところ、ストライドパラメータを省略しており、Pythonのデフォルトはストライド1であるため、2つのインデックス番号の間のすべてのアイテムが取得されます。

この構造の構文はlist[x:y:z]で、zはストライドを指します。 より大きなリストを作成し、それをスライスして、ストライドに2の値を与えましょう。

numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]

print(numbers[1:11:2])
Output[1, 3, 5, 7, 9]

私たちの構造numbers[1:11:2]は、1を含むインデックス番号と11を含まないインデックス番号の間の値を出力し、2のストライド値はプログラムにのみ出力するように指示します他のすべてのアイテム。

最初の2つのパラメーターを省略して、構文list[::z]のパラメーターとしてストライドのみを使用できます。

print(numbers[::3])
Output[0, 3, 6, 9, 12]

ストライドを3に設定してリストnumbersを印刷すると、3つおきのアイテムのみが印刷されます。

0 、1、2、 3 、4、5、 6 、7、8、 9 、10、11、[X74X ] 12

正と負の両方のインデックス番号を持つリストをスライスし、ストライドを示すことで、リストを操作し、達成しようとしている出力を受け取るためのコントロールが提供されます。

演算子を使用したリストの変更

演算子を使用して、リストを変更できます。 +および*演算子と、それらの複合形式+=および*=を使用して確認します。

+演算子を使用して、2つ以上のリストを連結できます。

sea_creatures = ['shark', 'octopus', 'blobfish', 'mantis shrimp', 'anemone']
oceans = ['Pacific', 'Atlantic', 'Indian', 'Southern', 'Arctic']

print(sea_creatures + oceans)
Output['shark', 'octopus', 'blobfish', 'mantis shrimp', 'anemone', 'Pacific', 'Atlantic', 'Indian', 'Southern', 'Arctic']

+演算子は連結できるため、リスト形式の項目(または複数)を別のリストの最後に追加するために使用できます。 アイテムを角かっこで囲むことを忘れないでください。

sea_creatures = sea_creatures + ['yeti crab']
print (sea_creatures)
Output['shark', 'octopus', 'blobfish', 'mantis shrimp', 'anemone', 'yeti crab']

*演算子を使用して、リストを乗算できます。 おそらく、ディレクトリ内のすべてのファイルのコピーをサーバーに作成するか、プレイリストを友達と共有する必要があります。この場合、データのコレクションを増やす必要があります。

sea_creaturesリストに2を掛け、oceansリストに3を掛けましょう。

print(sea_creatures * 2)
print(oceans * 3)
Output['shark', 'octopus', 'blobfish', 'mantis shrimp', 'anemone', 'yeti crab', 'shark', 'octopus', 'blobfish', 'mantis shrimp', 'anemone', 'yeti crab']
['Pacific', 'Atlantic', 'Indian', 'Southern', 'Arctic', 'Pacific', 'Atlantic', 'Indian', 'Southern', 'Arctic', 'Pacific', 'Atlantic', 'Indian', 'Southern', 'Arctic']

*演算子を使用すると、指定した回数だけリストを複製できます。

+および*演算子の複合形式を、代入演算子=とともに使用することもできます。 +=および*=複合演算子を使用すると、リストにすばやく自動でデータを入力できます。 これらの演算子を使用して、プレースホルダーをリストに入力できます。プレースホルダーは、たとえば、ユーザーが指定した入力で後で変更できます。

リスト形式のアイテムをリストsea_creaturesに追加しましょう。 このアイテムはプレースホルダーとして機能します。このプレースホルダーアイテムを数回追加したいと思います。 これを行うには、+=演算子をforループとともに使用します。

for x in range(1,4):
    sea_creatures += ['fish']
    print(sea_creatures)
Output['shark', 'octopus', 'blobfish', 'mantis shrimp', 'anemone', 'yeti crab', 'fish']
['shark', 'octopus', 'blobfish', 'mantis shrimp', 'anemone', 'yeti crab', 'fish', 'fish']
['shark', 'octopus', 'blobfish', 'mantis shrimp', 'anemone', 'yeti crab', 'fish', 'fish', 'fish']

forループの反復ごとに、'fish'の追加のリスト項目が元のリストsea_creaturesに追加されます。

*=演算子は同じように動作します。

sharks = ['shark']

for x in range(1,4):
    sharks *= 2
    print(sharks)
Output['shark', 'shark']
['shark', 'shark', 'shark', 'shark']
['shark', 'shark', 'shark', 'shark', 'shark', 'shark', 'shark', 'shark']

演算子+および*を使用して、リストを連結し、リストを乗算できます。 複合演算子+=および*=は、リストを連結してリストを乗算し、新しいIDを元のリストに渡すことができます。

リストからのアイテムの削除

delステートメントを使用して、アイテムをリストから削除できます。 これにより、リスト内で指定したインデックス番号の値が削除されます。

sea_creaturesリストから、アイテム'octopus'を削除しましょう。 このアイテムは1のインデックス位置にあります。 アイテムを削除するには、delステートメントを使用してから、リスト変数とそのアイテムのインデックス番号を呼び出します。

sea_creatures =['shark', 'octopus', 'blobfish', 'mantis shrimp', 'anemone', 'yeti crab']

del sea_creatures[1]
print(sea_creatures)
Output['shark', 'blobfish', 'mantis shrimp', 'anemone', 'yeti crab']

これで、インデックス位置1のアイテム、文字列'octopus'は、リストsea_creaturesに含まれなくなりました。

delステートメントで範囲を指定することもできます。 アイテム'octopus'だけでなく、'blobfish''mantis shrimp'も削除したいとします。 これを実現するために、delステートメントを使用してsea_creaturesの範囲を呼び出すことができます。

sea_creatures =['shark', 'octopus', 'blobfish', 'mantis shrimp', 'anemone', 'yeti crab']

del sea_creatures[1:4]
print(sea_creatures)
Output['shark', 'anemone', 'yeti crab']

delステートメントで範囲を使用することにより、1(包括的)のインデックス番号と4(排他的)のインデックス番号の間の項目を削除することができました。 、3つのアイテムを削除した後、3つのアイテムのリストを残します。

delステートメントを使用すると、リストデータ型から特定のアイテムを削除できます。

リストアイテムを使用したリストの作成

リストは、リストで構成されるアイテムで定義できます。各括弧で囲まれたリストは、親リストの大きな括弧で囲まれています。

sea_names = [['shark', 'octopus', 'squid', 'mantis shrimp'],['Sammy', 'Jesse', 'Drew', 'Jamie']]

リスト内のこれらのリストは、ネストされたリストと呼ばれます。

このリスト内のアイテムにアクセスするには、複数のインデックスを使用する必要があります。

print(sea_names[1][0])
print(sea_names[0][0])
OutputSammy
shark

最初のリストはアイテムと等しいため、インデックス番号は0になります。これは構造の最初の番号になり、2番目のリストのインデックス番号は1になります。 ネストされた各内部リスト内には、2番目のインデックス番号で呼び出す個別のインデックス番号があります。

sea_names[0][0] = 'shark'
sea_names[0][1] = 'octopus'
sea_names[0][2] = 'squid'
sea_names[0][3] = 'mantis shrimp'

sea_names[1][0] = 'Sammy'
sea_names[1][1] = 'Jesse'
sea_names[1][2] = 'Drew'
sea_names[1][3] = 'Jamie'

リストのリストを操作するときは、関連するネストされたリスト内の特定のアイテムにアクセスするために、複数のインデックス番号を参照する必要があることに注意することが重要です。

結論

リストデータ型は、プログラムの過程全体で変更できる柔軟なデータ型です。 このチュートリアルでは、リストのインデックス作成、スライス、変更、連結など、リストの基本的な機能について説明しました。

ここから、「リストメソッドの使用方法」およびリスト内包表記を読んで、Pythonでのリストの操作について詳しく知ることができ、既存のリストに基づいてリストを作成できます。 一般的なデータ型の詳細については、「データ型について」チュートリアルを参照してください。