Python のリストの基本を紹介する

PythonPythonBeginner
オンラインで実践に進む

This tutorial is from open-source community. Access the source code

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

このセクションでは、値の順序付きコレクションを保持するための Python の主要な型であるリストについて説明します。

これは Guided Lab です。学習と実践を支援するためのステップバイステップの指示を提供します。各ステップを完了し、実践的な経験を積むために、指示に注意深く従ってください。過去のデータによると、この 初級 レベルの実験の完了率は 82%です。学習者から 100% の好評価を得ています。

リストの作成

リストリテラルを定義するには、角括弧を使用します。

names = [ 'Elwood', 'Jake', 'Curtis' ]
nums = [ 39, 38, 42, 65, 111]

時々、他の方法でリストが作成されます。たとえば、文字列を split() メソッドを使用してリストに分割できます。

>>> line = 'GOOG,100,490.10'
>>> row = line.split(',')
>>> row
['GOOG', '100', '490.10']
>>>

リスト操作

リストは任意の型の要素を保持できます。append() を使用して新しい要素を追加します。

names.append('Murphy')    ## 末尾に追加
names.insert(2, 'Aretha') ## 中央に挿入

+ を使用してリストを連結します。

s = [1, 2, 3]
t = ['a', 'b']
s + t           ## [1, 2, 3, 'a', 'b']

リストは整数でインデックス付けされます。0 から始まります。

names = [ 'Elwood', 'Jake', 'Curtis' ]

names[0]  ## 'Elwood'
names[1]  ## 'Jake'
names[2]  ## 'Curtis'

負のインデックスは末尾から数えます。

names[-1] ## 'Curtis'

リスト内の任意の要素を変更できます。

names[1] = 'Joliet Jake'
names                     ## [ 'Elwood', 'Joliet Jake', 'Curtis' ]

リストの長さ。

names = ['Elwood','Jake','Curtis']
len(names)  ## 3

メンバーシップテスト (in, not in)。

'Elwood' in names       ## True
'Britney' not in names  ## True

複製 (s * n)。

s = [1, 2, 3]
s * 3   ## [1, 2, 3, 1, 2, 3, 1, 2, 3]

リストの反復処理と検索

for を使用して、リストの内容を反復処理します。

for name in names:
    ## name を使用する
    ## たとえば、print(name)
   ...

これは、他のプログラミング言語の foreach 文に似ています。

何かの位置を迅速に見つけるには、index() を使用します。

names = ['Elwood','Jake','Curtis']
names.index('Curtis')   ## 2

要素が複数回登場する場合、index() は最初の出現箇所のインデックスを返します。

要素が見つからない場合、ValueError 例外が発生します。

リストからの要素の削除

要素の値またはインデックスを使って要素を削除できます。

## 値を使った場合
names.remove('Curtis')

## インデックスを使った場合
del names[1]

要素を削除すると、穴が空くことはありません。他の要素が下に移動して空いたスペースを埋めます。要素が複数回登場する場合、remove() は最初の登場箇所のみを削除します。

リストのソート

リストは「その場で」ソートできます。

s = [10, 1, 7, 3]
s.sort()                    ## [1, 3, 7, 10]

## 逆順
s = [10, 1, 7, 3]
s.sort(reverse=True)        ## [10, 7, 3, 1]

## 任意の順序付きデータにも対応
s = ['foo', 'bar','spam']
s.sort()                    ## ['bar', 'foo','spam']

新しいリストを作成したい場合は、sorted() を使用します。

t = sorted(s)               ## s は変更されず、t にソート済みの値が格納される

リストと数学

注意:リストは数学演算用に設計されていません。

>>> nums = [1, 2, 3, 4, 5]
>>> nums * 2
[1, 2, 3, 4, 5, 1, 2, 3, 4, 5]
>>> nums + [10, 11, 12, 13, 14]
[1, 2, 3, 4, 5, 10, 11, 12, 13, 14]

具体的には、MATLAB、Octave、R などのように、リストはベクトルや行列を表しません。ただし、それを支援するパッケージもいくつかあります (たとえば、numpy)。

このチャレンジでは、Python のリストデータ型を実験します。前のセクションでは、株価シンボルを含む文字列を扱いました。

>>> symbols = 'HPQ,AAPL,IBM,MSFT,YHOO,DOA,GOOG'

文字列を split() 演算子を使って名前のリストに分割します。

>>> symlist = symbols.split(',')

演習 1.19: リスト要素の抽出と再割り当て

いくつかの参照を試してみましょう。

>>> symlist[0]
'HPQ'
>>> symlist[1]
'AAPL'
>>> symlist[-1]
'GOOG'
>>> symlist[-2]
'DOA'
>>>

1 つの値を再割り当てしてみましょう。

>>> symlist[2] = 'AIG'
>>> symlist
['HPQ', 'AAPL', 'AIG', 'MSFT', 'YHOO', 'DOA', 'GOOG']
>>>

いくつかのスライスを取ってみましょう。

>>> symlist[0:3]
['HPQ', 'AAPL', 'AIG']
>>> symlist[-2:]
['DOA', 'GOOG']
>>>

空のリストを作成して、そこに項目を追加しましょう。

>>> mysyms = []
>>> mysyms.append('GOOG')
>>> mysyms
['GOOG']

リストの一部を別のリストに再割り当てることができます。たとえば:

>>> symlist[-2:] = mysyms
>>> symlist
['HPQ', 'AAPL', 'AIG', 'MSFT', 'YHOO', 'GOOG']
>>>

このようにすると、左辺のリスト (symlist) は右辺のリスト (mysyms) が収まるように適切にサイズ変更されます。たとえば、上の例では、symlist の最後の 2 つの項目が、リスト mysyms の 1 つの項目に置き換えられました。

演習 1.20: リスト要素のループ処理

for ループは、リストなどのシーケンス内のデータをループ処理することで機能します。次のループを入力して何が起こるか見てみましょう。

>>> for s in symlist:
        print('s =', s)
## 出力を見てください

演習 1.21: 所属判定

in または not in 演算子を使って、'AIG''AA'、および 'CAT' がシンボルのリストに含まれているかどうかを確認します。

>>> ## 'AIG' は `symlist` に含まれていますか?
True
>>> ## 'AA' は `symlist` に含まれていますか?
False
>>> ## 'CAT' は `symlist` に含まれていませんか?
True
>>>
✨ 解答を確認して練習

演習 1.22: 項目の追加、挿入、削除

append() メソッドを使って、シンボル 'RHT'symlist の末尾に追加します。

>>> symlist.append('RHT') ## 'RHT' を追加
>>> symlist
['HPQ', 'AAPL', 'AIG', 'MSFT', 'YHOO', 'GOOG', 'RHT']
>>>

insert() メソッドを使って、シンボル 'AA' をリストの 2 番目の項目として挿入します。

>>> symlist.insert(1, 'AA') ## 'AA' をリストの 2 番目の項目として挿入
>>> symlist
['HPQ', 'AA', 'AAPL', 'AIG', 'MSFT', 'YHOO', 'GOOG', 'RHT']
>>>

remove() メソッドを使って、リストから 'MSFT' を削除します。

>>> symlist.remove('MSFT') ## 'MSFT' を削除
>>> symlist
['HPQ', 'AA', 'AAPL', 'AIG', 'YHOO', 'GOOG', 'RHT']
>>>

リストの末尾に 'YHOO' の重複エントリを追加します。

注:リストに重複する値があるのは完全に正常です。

>>> symlist.append('YHOO') ## 'YHOO' を追加
>>> symlist
['HPQ', 'AA', 'AAPL', 'AIG', 'YHOO', 'GOOG', 'RHT', 'YHOO']
>>>

index() メソッドを使って、リスト内の 'YHOO' の最初の位置を見つけます。

>>> symlist.index('YHOO') ## 'YHOO' の最初のインデックスを見つける
4
>>> symlist[4]
'YHOO'
>>>

リスト内の 'YHOO' が何回出現するか数えます:

>>> symlist.count('YHOO')
2
>>>

最初に出現する 'YHOO' を削除します。

>>> symlist.remove('YHOO') ## 最初に出現する 'YHOO' を削除
>>> symlist
['HPQ', 'AA', 'AAPL', 'AIG', 'GOOG', 'RHT', 'YHOO']
>>>

ご存知のように、項目のすべての出現を見つけたり削除したりするメソッドはありません。ただし、セクション 2 でこれを行うエレガントな方法を見ます。

演習 1.23: ソート

リストをソートしたいですか?sort() メソッドを使ってみましょう。試してみましょう。

>>> symlist.sort()
>>> symlist
['AA', 'AAPL', 'AIG', 'GOOG', 'HPQ', 'RHT', 'YHOO']
>>>

逆順にソートしたいですか?これを試してみましょう。

>>> symlist.sort(reverse=True)
>>> symlist
['YHOO', 'RHT', 'HPQ', 'GOOG', 'AIG', 'AAPL', 'AA']
>>>

注:リストをソートすると、その内容が「その場で」変更されます。つまり、リストの要素が入れ替えられますが、結果として新しいリストは作成されません。

演習 1.24: すべてを再構築する

文字列をリストとして受け取り、それらを 1 つの文字列に結合したいですか?このように文字列の join() メソッドを使います (注:最初は少々奇妙に見えます)。

>>> a = ','.join(symlist)
>>> a
'YHOO,RHT,HPQ,GOOG,AIG,AAPL,AA'
>>> b = ':'.join(symlist)
>>> b
'YHOO:RHT:HPQ:GOOG:AIG:AAPL:AA'
>>> c = ''.join(symlist)
>>> c
'YHOORHTHPQGOOGAIGAAPLAA'
>>>

演習 1.25: 任意のもののリスト

リストは、他のリスト(たとえば、ネストされたリスト)を含む、任意の種類のオブジェクトを含めることができます。これを試してみましょう。

>>> nums = [101, 102, 103]
>>> items = ['spam', symlist, nums]
>>> items
['spam', ['YHOO', 'RHT', 'HPQ', 'GOOG', 'AIG', 'AAPL', 'AA'], [101, 102, 103]]

上記の出力に注目してください。items は 3 つの要素を持つリストです。最初の要素は文字列ですが、他の 2 つの要素はリストです。

ネストされたリスト内の要素には、複数のインデックス操作を使用してアクセスできます。

>>> items[0]
'spam'
>>> items[0][0]
's'
>>> items[1]
['YHOO', 'RHT', 'HPQ', 'GOOG', 'AIG', 'AAPL', 'AA']
>>> items[1][1]
'RHT'
>>> items[1][1][2]
'T'
>>> items[2]
[101, 102, 103]
>>> items[2][1]
102
>>>

技術的には非常に複雑なリスト構造を作成することも可能ですが、一般的なルールとして、物事をシンプルに保つようにしましょう。通常、リストはすべて同じ種類の値を保持します。たとえば、完全に数値のみから構成されるリストや、文字列のリストです。同じリスト内に異なる種類のデータを混ぜ合わせることは、しばしば頭が爆発するようなことになるので、避けるのが最善です。

まとめ

おめでとうございます!あなたはリストの実験を完了しました。あなたのスキルを向上させるために、LabEx でさらに多くの実験を練習することができます。