二次元配列とか多次元配列って名称を忘れていた...
まあそれは置いておいて...
背景1: 入力の方が数値と文字列のMix
入力値が [str, int] で複数渡されるような場合にどうしたらいいんだっけ?となったのでメモ
やりかた
普通にまずはstrで受け取る
それぞれの型に変換する
listに配列の形でappend
する
sample_list = [] n = int(input()) for i in range(n): s, i = map(str, input().split()) # intに変換 i = int(i) sample_list.append([s, i])
これで、[[s1, i1], [s2, i2] .... [sn, in]]の二次元配列の完成!
ソート
ちなみ多次元配列をソートしたい場合、最初の要素が比較されるようなので
str
をソートしたいのか、int
をソートしたいかによってappend
時に変数を入れ替える必要がある
たとえば上記のコード例でintで並び替えたい場合:
sample_list.append([i, s]) sort.sample_list()
ってしないと数値で並び替えしてくれないですよ!
背景2: マス目
- 入力値が下記みたいなやつ.
..#...# #..#..# .#####
やりかた
- 基本上記のようなやつマス目系のやつで、heightやwidthが渡されるので、下記とする.
s = [input() for i in range(height)] # ['#.#..', '.....', '.#...']
- さらに、解答用の二次元配列を用意する場合は、下記のように:
- 1行ずつの文字列を横に1つずつ(indexごとに)見て、値によって初期値を変えている.
result = [[0 if v == '.' else '#' for v in row] for row in s] # [[0, 0, 0, 0, 0], [0, '#', 0, '#', 0], [0, 0, 0, 0, 0]]
- もっとわかりやすい例
list2 = [[0 for i in range(3)] for j in range(3)] print(list2) # [ # [0, 0, 0], # [0, 0, 0], # [0, 0, 0] # ]
背景3: 一般的なもの
- よくある下記のような入力値に対応する二次元配列を作成する
3 2 1 2 5 5 -2 8
やりかた
n, d = map(int, input().split()) x = [list(map(int, input().split())) for _ in range(n)] print(x) # [[1, 2], [5, 5], [-2, 8]]
背景4: 空の二次元配列の作成
- 中身のない二次元配列を作成
n = 3 g = [[] for _ in range(n)] print(g) # [[], [], []]
- 外側のforがいくつのarrayを作るか、ということになる.
- すなわち、
array[A][B]
の[A]
側.
- すなわち、
- この場合、
append
して各indexのarrayに要素を追加する.