Python 3 におけるリストの理解

導入

A list is a data structure in Python that is a mutable, or changeable, ordered sequence of elements. Each element or value that is inside of a list is called an item. Just as strings are defined as characters between quotes, lists are defined by having values between square brackets [ ].

リストは、関連する多くの値を扱いたいときに便利です。それらは、一緒に属するデータを保持し、コードを簡略化し、複数の値に対して同じメソッドや操作を一度に実行できるようにします。

Pythonのリストや他のコレクション型のデータ構造を考えるとき、コンピューター上にあるさまざまなコレクションを考慮することが役立ちます。ファイルのアソートメント、曲のプレイリスト、ブラウザのブックマーク、電子メール、ストリーミングサービスでアクセスできるビデオのコレクションなどがあります。

前提条件

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

文字列リスト

始めるために、文字列データ型のアイテムを含むリストを作成しましょう:

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

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

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

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

順序付けられた要素のシーケンスとして、リスト内の各アイテムはインデックスを介して個別に呼び出すことができます。リストは小さな部分から成る複合データ型であり、値を追加、削除、変更することができるため、非常に柔軟です。多くの値を保存したり、値を繰り返し処理したりする必要があり、それらの値を簡単に変更できる場合は、おそらくリストデータ型で作業したいと思うでしょう。

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

リストのインデックス

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

リストsea_creaturesのインデックスの分解は次のようになります:

‘shark’ ‘cuttlefish’ ‘squid’ ‘mantis shrimp’ ‘anemone’
0 1 2 3 4

最初のアイテム、文字列'shark'はインデックス0で始まり、リストはアイテム'anemone'でインデックス4で終了します。

Pythonのリスト内の各アイテムに対応するインデックス番号があるため、他の連続データ型と同様にリストをアクセスおよび操作できます。

これで、リストの個々のアイテムを参照することができます:

print(sea_creatures[1])
Output
cuttlefish

このリストのインデックス番号は、上記の表に示されているように04までです。したがって、個々のアイテムを呼び出すには、次のようにインデックス番号を参照します:

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

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

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

正のインデックス番号に加えて、リストのアイテムには負のインデックス番号を使用してアクセスすることもできます。これは、リストが長く、リストの末尾に向かってアイテムを特定したい場合に特に便利です。

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

‘shark’ ‘cuttlefish’ ‘squid’ ‘mantis shrimp’ ‘anemone’
-5 -4 -3 -2 -1

したがって、負のインデックス番号を使用してアイテム'squid'を印刷したい場合、次のようにします:

print(sea_creatures[-3])
Output
squid

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

print('Sammy is a ' + sea_creatures[0])
Output
Sammy 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'が負のインデックス番号-3(正のインデックス番号2に対応)で'squid'に置き換えられます。

リスト内のアイテムを変更できることは、リストを効率的に変更および更新する能力を提供します。

リストのスライス

リストから特定のアイテムを呼び出すこともできます。たとえば、sea_creatures の中間のアイテムのみを表示したい場合、スライス を作成することで行うことができます。スライスを使用すると、コロン [x:y] で区切られたインデックス番号の範囲を作成することで、複数の値を呼び出すことができます:

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

スライスを作成する際、[1:4] のように、最初のインデックス番号はスライスの開始位置(含む)であり、2 番目のインデックス番号はスライスの終了位置(除外)です。そのため、上記の例では位置 12、および 3 のアイテムが表示されます。

リストの両端を含めたい場合、list[x:y] の構文のいずれかの数値を省略することができます。たとえば、リスト sea_creatures の最初の 3 つのアイテム — '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']

ストライドと呼ばれる最後のパラメーターも、スライスで使用できます。これは、リストから最初のアイテムが取得された後に何個のアイテムを前進させるかを指します。これまでに、ストライドパラメーターを省略してきましたが、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]

リストnumbersをストライドを3に設定して表示すると、毎回の3つ目のアイテムのみが表示されます:

0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 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']

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

リストからアイテムを削除する

リストからアイテムを削除するには、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つのアイテムが残ったリストを作成できました。

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

リストアイテムを使用してリストの構築

リストは、それぞれがリストで構成されるアイテムで定義することができます。親リストの大きな角かっこの中に含まれる各角かっこで囲まれたリスト:

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

これらのリスト内のリストをネストされたリストと呼びます。

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

print(sea_names[1][0])
print(sea_names[0][0])
Output
Sammy 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でリストを操作する方法について詳しく知ることができます。「リストメソッドの使用方法」を読んだり、既存のリストに基づいてリストを作成するためのリスト内包表記について学んだりすることができます。データ型全般について詳しく知りたい場合は、「データ型の理解」チュートリアルを読んでください。

Source:
https://www.digitalocean.com/community/tutorials/understanding-lists-in-python-3