0
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

~ 配列 ~ チートシート

Last updated at Posted at 2021-03-28

#目次
listの作成 mat = [[0] * W for i in range(H)]
arrayの作成 import array mat = array.array('i', mat)
配列のコピー copy.deepcopy()
要素の追加 .append()
要素の挿入 .insert(position, num)
要素の削除 .pop() del mat[] remove() clear()
重複した要素を削除 list(set()) list(dict.fromkeys())
要素の検索 .index()
要素の個数 .count()

ソート .sort(reverse=False) sorted() (もしかして:優先度付きキュー

#はじめに

チートシートの扱いついてはここを読んでください

#listの作成

array.py
mat = [0] * N

0埋めの配列を作る
1次元の場合は簡単

array.py
mat = [i for i in range(N)]

for を使ってこういうこともできる([0, 1, 2, 3, 4, ..... , N-1] を作成)

array.py
mat = [[0] * W for i in range(H)]
#     [[0] * 横 for i in range(縦)]

2次元の場合はちょっと面倒
mat = [[0]*W]*H だと2次元配列自体は作れても個別での要素の変更ができないのでアウト

#arrayの作成

まずはライブラリをインポート import array

arrayはlistと異なり、1つの型(数字のみ)、1次元のみしか扱えない
listより高速に挿入などの処理ができる(要検証)

array.py
import array

mat = [0]*N
mat = array.array('i', mat)

array.array() の第一引数で要素の型を指定する(intならifloatならf

#配列のコピー

array.py
import copy
mat_new = copy.deepcopy(mat)

for文で1つずつ要素をコピーしてもいいけどこっちのほうが楽
import copyを忘れずに
サッと書けるので便利だけど、同じ大きさの配列定義してfor文で代入した方がかなり早いので、実行時間がシビアな場合は注意

array.py
mat_new = mat[:]

1次元の場合はこれでもOK

#ソート

array.py
mat.sort(reverse=False)

.sort()の前につけた配列を降順でソート(破壊的)
(reverse=True)にすると降順になる

array.py
new_mat = sorted(mat)

()内に入れた配列を降順でソートし渡す
sorted().sort()と違い非破壊的なので、元の配列が保持される

#重複した要素を削除

array.py
mat = list(set(mat))

配列を昇順でソートしたうえで、重複した要素を削除する
set()だと配列ではないのでlist()で配列に戻す

array.py
mat = list(dict.fromkeys(mat))

list(dict.fromkeys())を使えばソートせずに重複した要素を削除することが可能

#要素の削除

array.py
mat = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

mat.pop(7)
mat
>>> [0, 1, 2, 3, 4, 5, 6, 8, 9]

1つしか要素を削除しないならば.pop()も可能

array.py
mat = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

del mat[7]
mat
>>> [0, 1, 2, 3, 4, 5, 6, 8, 9]

削除したい要素を指定し削除できる

array.py
mat = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

del mat[5:]
#del mat[:5]
#del mat[3:6]
mat
>>> [0, 1, 2, 3, 4]
>>> [5, 6, 7, 8, 9]
>>> [0, 1, 2, 6, 7, 8, 9]

delならば配列の要素をまとめて削除することも可能

array.py
mat = [1, 1, 4, 5, 1, 4]

mat.remove(4)
mat
>>> [1, 1, 5, 1, 4]

指定した要素のうち、最初の1つだけが削除される

array.py
mat = [1, 1, 4, 5, 1, 4]

mat.clear()
mat
>>> []

全ての要素を削除し、空集合に

#要素の検索

array.py
mat = [1, 1, 4, 5, 1, 4]

print(mat.index(4))
mat
>>> 2

要素の格納されている位置を返す(最初の1つだけ)
要素に含まれない値を指定するとエラーを吐くので注意

#要素の個数

array.py
mat = [1, 1, 4, 5, 1, 4]

print(mat.count(1))
mat
>>> 3

配列内の指定した要素の個数を返す

#要素の追加

array.py
mat.append(n)

nmatの最後に追加される

#要素の挿入

array.py
mat.insert(position, n)

nmatposition番目(インデックス番号)に追加される
要素を最後に追加するだけではダメな場合(最初に追加したい場合など)に使う

計算量がO(log(N))とかなり必要なので、できれば使用を避けたい(.append()で配列の最後に追加する場合はO(log(1))で済む)
arrayを用いると、listより高速で挿入ができる(理由は知らない)

0
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?