はじめに
このセクションでは、値の順序付きコレクションを保持するための Python の主要な型であるリストについて説明します。
This tutorial is from open-source community. Access the source code
💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください
このセクションでは、値の順序付きコレクションを保持するための Python の主要な型であるリストについて説明します。
リストリテラルを定義するには、角括弧を使用します。
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(',')
いくつかの参照を試してみましょう。
>>> 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 つの項目に置き換えられました。
for
ループは、リストなどのシーケンス内のデータをループ処理することで機能します。次のループを入力して何が起こるか見てみましょう。
>>> for s in symlist:
print('s =', s)
## 出力を見てください
in
または not in
演算子を使って、'AIG'
、'AA'
、および 'CAT'
がシンボルのリストに含まれているかどうかを確認します。
>>> ## 'AIG' は `symlist` に含まれていますか?
True
>>> ## 'AA' は `symlist` に含まれていますか?
False
>>> ## 'CAT' は `symlist` に含まれていませんか?
True
>>>
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 でこれを行うエレガントな方法を見ます。
リストをソートしたいですか?sort()
メソッドを使ってみましょう。試してみましょう。
>>> symlist.sort()
>>> symlist
['AA', 'AAPL', 'AIG', 'GOOG', 'HPQ', 'RHT', 'YHOO']
>>>
逆順にソートしたいですか?これを試してみましょう。
>>> symlist.sort(reverse=True)
>>> symlist
['YHOO', 'RHT', 'HPQ', 'GOOG', 'AIG', 'AAPL', 'AA']
>>>
注:リストをソートすると、その内容が「その場で」変更されます。つまり、リストの要素が入れ替えられますが、結果として新しいリストは作成されません。
文字列をリストとして受け取り、それらを 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'
>>>
リストは、他のリスト(たとえば、ネストされたリスト)を含む、任意の種類のオブジェクトを含めることができます。これを試してみましょう。
>>> 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 でさらに多くの実験を練習することができます。