はじめに
リストはpythonでもっともよく使われるデータ構造です。従って、効率よく使う方法を覚えておくと良いでしょう。 自分の経験とネット調査からわかった幾つかの使い方をまとめました。
1. リストのindexを使う方法
普通のやり方
items = [12, 34, 33, 332, 11]
for index in len(items):
print(index, items[index])
効率的なやり方
items = [12, 34, 33, 332, 11]
for index, item in enumerate(items):
print(index, item)
enumerateは、スタートインデックスを指定することも可能です。
2. リストの拡張 (複数の要素をリストに追加したい時)
リストに要素を追加する時、append
, insert
を使うのが一般的です。ただし、あるリストに他のリストの複数の要素を追加したい時は、extend
を使うと便利です。
普通のやり方
x = [1, 2, 3, 4]
y = [5, 6, 7]
for i in x:
y.append(i)
効率的なやり方
x = [1, 2, 3, 4]
y = [5, 6, 7]
y.extend(x)
注意: extendのパラメータは必ずiterate可能な変数でないとエラーになります。
3. リストが空であるかの判定
普通のやり方
if len(items) == 0:
print('empty list')
if items == []:
print('empty list')
効率的なやり方
if not items:
print('empty list')
5. リストの部分要素の抽出
items[start : end : step]
上のコマンでitemsのうち、start <= インデックス < endの全ての要素をとることが可能になります。stepは抽出インデックスの幅を指します。defaultでstepは1になります。
例:
items = [1, 2, 3, 4, 5, 6, 7, 8, 9]
print(items[2, 8, 2])
=> items[2], items[4], items[6]を返します。
6. リストのコピー手法
# 1
new_list = old_list[ : ]
# 2
new_list = list(old_list)
# 3
import copy
new_list = copy.copy(old_list)
new_list = copy.deepcopy(old_list)
7. リスト最後の要素の取得
items[-1]
インデックスにマイナスをつけると、リストの後ろから数えて要素を取得します。
8. リストのソーティング
リストのソーティングは、リスト自体が持つ sort
関数とpython組み込み関数の sorted
で実現可能です。
sort関数は、辞書型データから構成されたリストで、keyやvalueをソーティングする時によくつかいます。
例:
items = [
{ "name": "kobe", "age": 21 },
{"name": "kobe", "age": 10},
{"name": "kobe", "age": 2}
]
items.sort(key=lambda, item: item.get("age"))
=> sort関数の場合、既存のリストないで順番によって要素を置き換えることでソーティングを実現します。また、reverse=Trueと指定すると、降順にソーティングすることを意味します。デフォルトは昇順でソーテイングします。
一方、sorted関数は、ソーティングされた新しいリストを作って返します。
items = [
{ "name": "kobe", "age": 21 },
{"name": "kobe", "age": 10},
{"name": "kobe", "age": 2}
]
sorted(items, key=lambda, item: item.get("age"))
8. 要素の削除
要素の削除には, remove
, del
, pol
など三つの方法があります。
remove関数は、リストに重複要素があっても、最初の一個のみを削除します。
例:
a = [2, 3, 4, 5, 6, 6]
a.remove(6)
print(a)
=> [2, 3, ,4, 5, 6]
del関数の場合、リストのインデックスを元に削除を行います。
例:
a = [2, 3, 4, 5, 6, 6]
del(a[2])
print(a)
=> [2, 3, , 5, 6, 6]
pop関数も、リストのインデックスを元に削除を行います。
例:
a = [2, 3, 4, 5, 6, 6]
a.pop(1)
print(a)
=> [2, 4, 5, 6, 6]
9. リストの連結
a = [1, 2, 3, 4]
b = [1, 2]
c = a + b
print(c)
=> [1,2,3,4,1,2]を返す
10. リストからランダムに要素を抽出(sample)
import = random
items = [1, 3, 4, 5 ,6, 7]
random.choice(items)