リストの基礎

入門Python3 3.2

空リストの生成

list関数(正確にはシーケンス型らしい)か[]で生成できる。

ary1 = list()
ary2 = []
print(ary1)
print(ary2)
$ py main.py
[]
[]

リストの生成

リストにはさまざまな要素を入れることができる。

ary1 = [1,2,3]
ary2 = ['a','b','c']
ary3 = [1,'a'] # intと文字列を混在させてもOK
print(ary1)
print(ary2)
print(ary3)
$ py main.py
[1, 2, 3]
['a', 'b', 'c']
[1, 'a']

またリストをネストさせることも可能。

ary = [[1,2,3],[4,5,6],['a']]
$ py main.py
[[1, 2, 3], [4, 5, 6], ['a']]

[]演算子よるリストの取り出し

ary[]で対象の要素を取り出すことができる。

ary = ['foo','bar','baz']
print(ary[0])
$ py main.py
foo

また文字列と同じくスライスもできる。

ary = ['foo','bar','baz']
print(ary[1:])
$ py main.py
['bar', 'baz']

[]演算子による要素への代入

リストは文字列とは違いミュータブルなので代入が可能とのこと。

ary = ['foo','bar','baz']
print(ary)

ary[0] = 'hoge'
print(ary)
$ py main.py
['foo', 'bar', 'baz']
['hoge', 'bar', 'baz']

appendによる末尾への要素の追加

ary = ['foo','bar','baz']
ary.append('hoge')
print(ary)
$ py main.py
['foo', 'bar', 'baz', 'hoge']

extendによるリストのマージ

リスト同士をマージして一つのリストにする。

ary1 = ['foo','bar','baz']
ary2 = [1,2,3]
ary1.extend(ary2)
print(ary1)
$ py main.py
['foo', 'bar', 'baz', 1, 2, 3]

また+=でも同じことができる。

ary1 = ['foo','bar','baz']
ary2 = [1,2,3]
ary1 += ary2
print(ary1)
$ py main.py
['foo', 'bar', 'baz', 1, 2, 3]

insertによる指定位置への要素の追加

指定したインデックスに対して要素を追加することができる。

例えば0を指定すれば先頭への追加となる。

ary = ['foo','bar','baz']
ary.insert(0,'hoge')
print(ary)
$ py main.py
['hoge', 'foo', 'bar', 'baz']

ちなみに要素数以上の値を指定した場合は末尾への追加となる。

ary = ['foo','bar','baz']
ary.insert(len(ary),'hoge')
print(ary)
$ py main.py
['foo', 'bar', 'baz', 'hoge']

ま、append使えって話ですが。

delによる要素の削除

指定したインデックスの要素を削除します。

ary = ['foo','bar','baz']
del ary[1]
print(ary)
$ py main.py
['foo', 'baz']

delだけ使い方がちょっと違いますね。関数かな?と思ったんですがprint関数とは違い、カッコを付けなくても動作します。

調べてみるとdelは関数ではなく文なのでカッコは必要ないということです。

removeによる要素の削除

こちらはdelとは違い要素にマッチしたものを削除します。

ary = ['foo','bar','baz']
ary.remove('foo')
print(ary)
$ py main.py
['bar', 'baz']

ただし削除されるのは最初にマッチした要素のみになります。

ary = ['foo','bar','baz','foo']
ary.remove('foo')
print(ary) # 2個目のfooは削除されない
$ py main.py
['bar', 'baz', 'foo']

また存在しない要素を指定すると例外が発生します。

ary = ['foo','bar','baz']
ary.remove('hoge')
print(ary)
$ py main.py
Traceback (most recent call last):
  File "main.py", line 5, in <module>
    ary.remove('hoge')
ValueError: list.remove(x): x not in list

popによる要素の抜き出し

指定したインデックスの要素を抜き出します。

ary = ['foo','bar','baz']
val = ary.pop(0)
print(ary)
print(val)
$ py main.py
['bar', 'baz']
foo

インデックスに-1を指定した場合は末尾の要素を抜き出します。

ary = ['foo','bar','baz']
val = ary.pop(-1)
print(ary)
print(val)
$ py main.py
['foo', 'bar']
baz

ちなみに引数なしでpopを呼ぶと末尾の要素を抜き出します。-1を指定したのと同じ挙動になるというわけですね。

inによる要素の存在チェック

ある要素がリストに存在しているかどうかチェックすることができます。

ary = ['foo','bar','baz']
result = 'foo' in ary # 存在する
print(result)

result = 'hoge' in ary # 存在しない
print(result)
$ py main.py
True
False

ソート処理

sortを使うことでそのリストの要素をソートします。

ary = [4,6,2]
ary.sort()
print(ary)
$ py main.py
[2, 4, 6]

また元のリストに影響を与えずにソートしたい場合はsorted関数を使います。

ary = [4,6,2]
sorted_ary = sorted(ary)
print(ary) # 元のリストは変わらず
print(sorted_ary)
$ py main.py
[4, 6, 2]
[2, 4, 6]