STEP: 1 要素数の出力
要素数の出力
a = [5, 1, 3, 4, 5, 12, 6, 8, 1, 3]
print(len(a))
要素数を数えるlen()を使います。
a = [5, 1, 3, 4, 5, 12, 6, 8, 1, 3]
print(len(a))
要素数を数えるlen()を使います。
例1
a = [5, 1, 3, 4, 5, 12, 6, 8, 1, 3]
for i in range(len(a)):
print(a[i])
例2
a = [5, 1, 3, 4, 5, 12, 6, 8, 1, 3]
for i in a:
print(i)
例3
a = [5, 1, 3, 4, 5, 12, 6, 8, 1, 3]
print(*a, sep='\n')
例1は、len()関数を用いて要素数を数え、その回数分ループしています。
例2は、リストをそのままにかけたやり方です。
例3は、len()も も使わないやり方です。このprint()文の書き方は今後も積極的に使用していきます。
a = [5, 1, 3, 4, 5, 12, 6, 8, 1, 3]
print(a[3])
リストは 0 番目から数えますので、「数列の 4 番目」の 4 から 1 を引く必要があります。
例1
a = [8, 1, 3, 3, 8, 1, 1, 3, 8, 8]
for i in range(len(a)):
print(a[i])
例2
a = [8, 1, 3, 3, 8, 1, 1, 3, 8, 8]
for i in a:
print(i)
例3
a = [8, 1, 3, 3, 8, 1, 1, 3, 8, 8]
print(*a, sep='\n')
データの中身が変わっただけで「STEP: 2 全要素の出力」と全く同じです。
例1
a = list(map(int, input().split()))
for i in range(len(a)):
print(a[i])
例2
a = list(map(int, input().split()))
for i in a:
print(i)
例3
a = list(map(int, input().split()))
print(*a, sep='\n')
この標準入力については「3章 標準入力」で解説しています。
例1
N = int(input())
a = list(map(int, input().split()))
for i in range(N):
print(a[i])
例2
_ = int(input())
a = list(map(int, input().split()))
for i in a:
print(i)
例3
_ = int(input())
a = list(map(int, input().split()))
print(*a, sep='\n')
数列の個数が入力として与えられましたが、例1の書き方でしか使いません。簡単でラクな方法を使っていきましょう。
K = int(input())
a = [1, 3, 5, 4, 6, 2, 1, 7, 1, 5]
print(a[K-1])
リストは 0 番目から数えますので、K から 1 を引く必要があります。
K = int(input())
a = list(map(int, input().split()))
print(a[K-1])
リストは 0 番目から数えますので、K から 1 を引く必要があります。
_, K = map(int, input().split())
a = list(map(int, input().split()))
print(a[K-1])
リストは 0 番目から数えますので、K から 1 を引く必要がありますと何度言わせれば・・・。😆
a = [[1, 2, 3, 4, 5, 6], [8, 1, 3, 3, 1, 8]]
print(len(a) * len(a[0]))
len(a)で一次元配列の要素数を数えます。その要素がまたリストになっているので、そのリストの要素数をlen(a[0])で数えています。
結果、2個 × 6個 = 12個 となります。
二次元配列(二次元リスト)については「2章 二次元リスト」で学習できます。
例1
a = [[6, 5, 4, 3, 2, 1], [3, 1, 8, 8, 1, 3]]
for i in range(2):
print(*a[i])
例2
a = [[6, 5, 4, 3, 2, 1], [3, 1, 8, 8, 1, 3]]
for nums in a:
print(*nums)
で1つ1つ、要素のリストを取り出して画面に出力します。
a = [[1, 2, 3], [4, 5, 6], [8, 1, 3]]
print(len(a))
慣れるまでは行と列がどっちがどっちか混乱するかもしれませんが、行は一次元配列側です。簡単なほうですね。😁
a = [[1, 2, 3, 4], [6, 5, 4, 3], [3, 1, 8, 1]]
print(len(a[0]))
リストになっている要素の1つの要素数を数えるだけです。
a = [[1], [2, 3], [4, 5, 6]]
for nums in a:
print(len(nums))
列数が要素数に変わりました。列数と違って、要素数は不揃いの場合もあります。使っている言葉が違うだけで同じものとも言えなくもないです。
ループを使って1つ1つ、リストの要素数を数えていくだけでおっけ。👍
a = [[1, 2, 3], [8, 1, 3], [10, 100, 1]]
print(a[1][2])
添字の最初が [行]、次が [列] となります。
a = [[1, 3, 5, 7], [8, 1, 3, 8]]
for nums in a:
print(*nums)
「STEP: 2 全要素の出力」と同じです。
例1
_ = int(input())
a = [list(map(int, input().split())) for _ in range(5)]
for i in range(5):
print(*a[i])
例2
_ = int(input())
a = [list(map(int, input().split())) for _ in range(5)]
for nums in a:
print(*nums)
この標準入力については「3章 標準入力」で解説しています。
例1
N = int(input())
a = [list(map(int, input().split())) for _ in range(N)]
for i in range(N):
print(*a[i])
例2
N = int(input())
a = [list(map(int, input().split())) for _ in range(N)]
for nums in a:
print(*nums)
この標準入力の方法は非常に多くの箇所で使います。
例1
N, _ = map(int, input().split())
a = [list(map(int, input().split())) for _ in range(N)]
for i in range(N):
print(*a[i])
例2
N, _ = map(int, input().split())
a = [list(map(int, input().split())) for _ in range(N)]
for nums in a:
print(*nums)
M は使わないので、二行目以降の書き方は1つ前の問題と同じです。
K, L = map(int, input().split())
a = [[1, 2, 3, 4], [10, 100, 0, 5], [8, 1, 3, 8], [15, 34, 94, 25]]
print(a[K-1][L-1])
要素番号は 0 から始まりますので、K
と L
それぞれから 1 を引きます。
K, L = map(int, input().split())
a = [list(map(int, input().split())) for _ in range(3)]
print(a[K-1][L-1])
要素番号は 0 から始まりますので、K
と L
それぞれから 1 を引きます。
N, _, K, L = map(int, input().split())
a = [list(map(int, input().split())) for _ in range(N)]
print(a[K-1][L-1])
要素番号は 0 から始まりますので、K
と L
それぞれから 1 を引きます。くどいね。😓
a = [10, 13, 21, 1, 6, 51, 10, 8, 15, 6]
n = 6
if n in a:
print('Yes')
else:
print('no')
リストa の中に 6 があるかどうかは ~ in を使って見つけることができます。このとき、リストa の先頭から1つずつ 6 を探していき、見つけたら True、見つからなかったら False を返します。
in については「2章 リスト型データを使いこなす機能一覧」で解説しています。
N = int(input())
a = [5, 12, 6, 84, 14, 25, 44, 3, 7, 20]
if N in a:
print('Yes')
else:
print('No')
6 が N になっただけで、1つ前の問題「配列に含まれている? 1」と同じ書き方です。
_, M = map(int, input().split())
a = list(map(int, input().split()))
if M in a:
print('Yes')
else:
print('No')
データが標準入力に変わっただけで、1つ前の問題「配列に含まれている? 2」と同じ書き方です。
例1
a = [1, 10, 2, 9, 3, 8, 4, 7, 5, 6]
n = 8
print(a.index(n) + 1)
例2
a = [1, 10, 2, 9, 3, 8, 4, 7, 5, 6]
n = 8
for i in range(len(a)):
if a[i] == n:
print(i+1)
break
.index()メソッドは、引数で示した値がある要素番号を返します。リストの先頭から探して最初に見つけた要素番号で返されます。
要素番号は 0 から始まりますので 1 を足す必要があります。
例2は、自力で探すプログラムです。こんな感じのことを.index()メソッドがやっていると思ってください。
例1
N = int(input())
a = [1, 5, 9, 7, 3, 2, 4, 8, 6, 10]
print(a.index(N) + 1)
例2
N = int(input())
a = [1, 5, 9, 7, 3, 2, 4, 8, 6, 10]
for i in range(len(a)):
if a[i] == N:
print(i+1)
break
探す数が標準入力になっただけで、1つ前の「何番目にある? 1」とほぼ同じになります。
例1
N, _ = map(int, input().split())
a = list(map(int, input().split()))
print(a.index(N) + 1)
例2
N, M = map(int, input().split())
a = list(map(int, input().split()))
for i in range(M):
if a[i] == N:
print(i+1)
break
数列データが標準入力になっただけで、1つ前の「何番目にある? 2」とほぼ同じになります。
例1
a = [1, 2, 2, 1, 2, 1, 2, 1, 1, 1]
n = 1
print(a.count(n))
例2
a = [1, 2, 2, 1, 2, 1, 2, 1, 1, 1]
cnt = 0
n = 1
for i in range(len(a)):
if a[i] == n:
cnt += 1
print(cnt)
.count()メソッドは、引数に示した値がリストの中にいくつ含まれているかを数えます。
例2は、自力でカウントしているプログラムです。.count()メソッドを使いましょう。😉
例1
N = int(input())
a = [1, 2, 5, 1, 4, 3, 2, 5, 1, 4]
print(a.count(N))
例2
N = int(input())
a = [1, 2, 5, 1, 4, 3, 2, 5, 1, 4]
cnt = 0
for i in range(len(a)):
if a[i] == N:
cnt += 1
print(cnt)
1 が N になった以外は、1つ前の問題「何個ある? 1」とほぼ同じです。
例1
N, _ = map(int, input().split())
a = list(map(int, input().split()))
print(a.count(N))
例2
N, M = map(int, input().split())
a = list(map(int, input().split()))
cnt = 0
for i in range(M):
if a[i] == N:
cnt += 1
print(cnt)
数列データを標準入力で受け取る以外は1つ前の問題「何個ある? 2」とほぼ同じになります。
A, B, N = map(int, input().split())
a = list(map(int, input().split()))
for i in range(N):
if a[i] == A:
a[i] = B
print(*a, sep='\n')
ちょっと難しめの問題ですね。😅
やることは3つです。
まずは 値A を探索します。for i in range(N):
で先頭から見ていきます。if a[i] == A:
で 値A を見つけたら、その要素を 値B に書き換えます。
A = 3, B = 1
a = [1, 2, 3, 4, 5] の時
i | ↓ | ||||
要素番号 | 0 | 1 | 2 | 3 | 4 |
リストa | 1 | 2 | 3 | 4 | 5 |
↓
i | ↓ | ||||
要素番号 | 0 | 1 | 2 | 3 | 4 |
リストa | 1 | 2 | 3 | 4 | 5 |
↓
i | ↓ | ||||
要素番号 | 0 | 1 | 2 | 3 | 4 |
リストa | 1 | 2 | 3 | 4 | 5 |
↓ a[i] = B で、3 を 1 に書き換える
i | ↓ | ||||
要素番号 | 0 | 1 | 2 | 3 | 4 |
リストa | 1 | 2 | 1 | 4 | 5 |
↓
i | ↓ | ||||
要素番号 | 0 | 1 | 2 | 3 | 4 |
リストa | 1 | 2 | 1 | 4 | 5 |
最後までループを終えたら リストa を画面に出力して完了です。
例1
A, B = map(int, input().split())
A, B = B, A
print(A, B)
例2
A, B = map(int, input().split())
tmp = A
A = B
B = tmp
print(A, B)
値交換 または スワップ(swap) と言います。
例2は、古くから使われるスワップの方法です。Python3 では例1の方法でスワップできますが、何かしらのスワップの機能が無い言語では例2のやり方でスワップします。
例2の方法は 基本情報技術者試験 という国家試験の内容にも盛り込まれています。資格に興味は無くても、憶えていて損はありません。
例1
A, B, N = map(int, input().split())
a = list(map(int, input().split()))
a[A-1], a[B-1] = a[B-1], a[A-1]
print(*a, sep='\n')
例2
A, B, N = map(int, input().split())
a = list(map(int, input().split()))
tmp = a[A-1]
a[A-1] = a[B-1]
a[B-1] = tmp
print(*a, sep='\n')
スワップの要素版です。ただし二次元リストの場合、要素となっているリストはスワップできませんので注意してください。
[[0, 1, 2], [3, 4, 5]]
↑ 緑色の部分はスワップできない
[[0, 1, 2], [3, 4, 5]]
↑ 黄色の整数部分はスワップできる
リストのスワップは別の方法でできるのですが、それは近い将来、自力で気付ける日が来るはずです。この「配列メニュー」にもそのヒントがありますので、それは今日かもしれない!🐱
A, B, N = map(int, input().split())
a = list(map(int, input().split()))
print(*a[A-1:B], sep='\n')
スライスを使えば解決です。A
から 1 を引くのを忘れずに。B
はそのままで大丈夫です。
スライスは「2章 リスト型」で学習できます。
_ = input()
a = list(map(int, input().split()))
b = list(map(int, input().split()))
c = a + b
print(*c, sep='\n')
リストとリストは、プラスの符号 + で繋げることができます。意外に簡単!
例1
_ = input()
a = list(map(int, input().split()))
sorted_a = sorted(a)
print(*sorted_a, sep='\n')
例2
_ = input()
a = list(map(int, input().split()))
a.sort()
print(*a, sep='\n')
Python3 にはソート機能が2つあります。
例1のsorted()関数は、リストなどのデータをソートして、ソートしたデータをリストにして返します。そのため、変数に代入する必要があります。
例2の.sort()メソッドは、リストのデータをその場で書き換えてしまいます。新しく変数を作らなくてよい場合に使います。
sorted()関数については「2章リスト型データを使いこなす機能一覧」のこちらで少しだけ解説しています。
.sort()メソッドについては「2章リスト型データを使いこなす機能一覧」のこちらで少しだけ解説しています。
例1
_ = input()
a = list(map(int, input().split()))
reversed_a = a[::-1]
print(*reversed_a, sep='\n')
例2
_ = input()
a = list(map(int, input().split()))
a.reverse()
print(*a, sep='\n')
例1は、リストa を反転したリストを変数に格納してから画面に出力しています。
例2は、リストa をそのまま反転して、リストa のデータを書き換えています。反転前のデータを保持しておく必要が無い時は、こちらのメソッドが便利です。
_, M = map(int, input().split())
a = list(map(int, input().split()))
print(a.count(M))
.count()は、指定した値が、リストの中にいくつ含まれているかを数えるメソッドです。
_, M = map(int, input().split())
a = list(map(int, input().split()))
a.append(M)
print(*a, sep='\n')
.append()は、引数の値をリストの末尾に要素として追加します。使用頻度極大なので勝手に覚えてしまいます。😹
例1
_, M = map(int, input().split())
a = list(map(int, input().split()))
del a[M-1]
print(*a, sep='\n')
例2
_, M = map(int, input().split())
a = list(map(int, input().split()))
a.pop(M-1)
print(*a, sep='\n')
例1は、リストの中の指定した要素番号の要素を削除します。
例2は、リストの中の指定した要素番号の要素を取り出します。こちらは取り出した要素の値に化けますが、変数に代入したり直接使ったりしないとそのまま消滅してしまいます。結果、削除と同様の形になります。
_, M, K = map(int, input().split())
a = list(map(int, input().split()))
a.insert(M-1, K)
print(*a, sep='\n')
.insert(要素番号, 値)は、リストの要素番号に値を挿入します。
s = ['Hello', 'paiza', '1234', 'pa13']
print(len(s))
要素の値が文字列であっても、どんな型であっても、型が混在していても、len()関数は要素の数をなんでも数えます。
例1
s = ['good', 'morning', 'paiza', '813', 'pa13']
print(*s, sep='\n')
例2
s = ['good', 'morning', 'paiza', '813', 'pa13']
print('\n'.join(s))
要素の値が文字列であっても、どんな型であっても、要素を操作するだけなので数値を扱う時とと大差ありません。
ただし要素が文字列の場合に限り、.join()メソッドが使えます。
s = ['good', 'morning', 'paiza', '813', 'pa13']
print(s[2])
リストは 0 番目から数えますので、3 から 1 を引く必要があります。
例1
s = ['eight', 'one', 'three', 'paiza', 'pa13', '813']
print(*s, sep='\n')
例2
s = ['eight', 'one', 'three', 'paiza', 'pa13', '813']
print('\n'.join(s))
2つ前の「STEP: 13 全要素の出力」の繰り返しになります。
s = input().split()
print(*s, sep='\n')
この標準入力については「3章 標準入力」で解説しています。
_ = input()
s = input().split()
print(*s, sep='\n')
N は使いませんので、1つ前の「文字列の配列の入力 2」とほぼ同じになります。
N = int(input())
s = ['good', 'morning', 'paiza', '813', 'pa13']
print(s[N-1])
リストは 0 番目から数えますので、N から 1 を引く必要があります。
N = int(input())
s = input().split()
print(s[N-1])
データが標準入力に変わっただけで、1つ前の「i 番目の出力 1」と同じです。
N, _ = map(int, input().split())
s = input().split()
print(s[N-1])
M は使いませんので、1つ前の「i 番目の出力 2」と同じです。
N, _, L = map(int, input().split())
s = input().split()
print(s[N-1][L-1])
M は使(ry
例1
s = ['zaipa', 'izapa', 'paiza']
sorted_s = sorted(s)
print(*sorted_s, sep='\n')
例2
s = ['zaipa', 'izapa', 'paiza']
s.sort()
print(*s, sep='\n')
問題文の最後を読んで、ランクDなのに手動でソートを求めてくるとかキティク!とか思ってしまいましたが、普通に関数やメソッドを使っていいみたいです。
例1
s = input().split()
sorted_s = sorted(s)
print(*sorted_s, sep='\n')
例2
s = input().split()
s.sort()
print(*s, sep='\n')
標準入力になっただけで、1つ前の「辞書順に出力 1」とほぼ同じです。
例1
_ = input()
s = input().split()
sorted_s = sorted(s)
print(*sorted_s, sep='\n')
例2
_ = input()
s = input().split()
s.sort()
print(*s, sep='\n')
N は使いませんので、1つ前の「辞書順に出力 3」と同じです。
例1
_, K = map(int, input().split())
s = input().split()
sorted_s = sorted(s)
print(sorted_s[K-1])
例2
_, K = map(int, input().split())
s = input().split()
s.sort()
print(s[K-1])
リストは 0 番目から数えますので、K から 1 を引く必要があります。やっと終わった。😅
a = [1, 3, 5, 1, 2, 3, 6, 6, 5, 1, 4]
set_a = set(a)
sorted_a = sorted(set_a)
print(*sorted_a, sep='\n')
set()関数を使うとリストの重複がなくなります。その代わりセット型になって並び順がめちゃくちゃになります。
しかしこの後ソートするので問題なし!sorted()関数を使ってソートしましょう。
set()は、リストをセット型に変換する関数です。セット型は.sort()メソッドが使えませんので、sorted()関数一択となります。
N = int(input())
a = list(map(int, input().split()))
print(max(a), min(a))
max()とmin()でリストの要素の最大値と最小値が取得できます。
_ = int(input())
a = list(map(int, input().split()))
for i in a:
if i >= 5:
print(i)
と を使って先頭から順に「 5 以上」の要素を画面に出力していきます。
_, K = map(int, input().split())
a = list(map(int, input().split()))
for i in a:
if i >= K:
print(i)
と を使って先頭から順に「 K 以上」の要素を画面に出力していきます。
N = int(input())
a = list(map(int, input().split()))
avg = sum(a) / N
for i in a:
if i >= avg:
print(i)
平均値は「リストの総和 ÷ 要素数」で求められます。sum()関数は、リストやセットなどのデータの総和を求めます。変数を1つ ( ) に入れるだけで全部足し算してくれます。
小数値が必要になりますので、割り算の商を求める // ではなく、単純に小数を含めて割り算した結果を求める / で計算します。この時の計算結果の値は、割り切れた場合でも 浮動小数型 (float) となります。
整数型(int) と浮動小数型(float) は型が異なりますが、混在して計算式に使ったり比較したりすることができます。
N = int(input())
loc = [list(map(int, input().split())) for _ in range(N)]
x1, y1 = 2, 3
for x2, y2 in loc:
mhtn_dist = abs(x1-x2) + abs(y1-y2)
print(mhtn_dist)
abs()は、引数の値の絶対値をとります。
絶対値をとるとは、マイナスの数(負数)のマイナスを取ってプラスの数(正数)にすることです。数学では |x| という様に書きます。
例)
負数 → 正数
正数 → 正数
この |x| がabs(x)です。
abs(x1-x2) + abs(y1-y2)
マンハッタン距離の意味がわからなくても親切に式を与えてくれますので、とりあえず | | があったらその部分をabs()で書けばよいということを知っておけば、あとは何とかなるはずです。😅
この他にも、場合によっては自分で「ここはabs()を使えばイケるかも!」とひらめきで使うこともあります。使用頻度は高くないのですが、使わないことはありませんので忘れずに覚えておいてください。
N, A, B = map(int, input().split())
loc = [list(map(int, input().split())) for _ in range(N)]
x1, y1 = loc[A-1]
x2, y2 = loc[B-1]
mhtn_dist = abs(x1-x2) + abs(y1-y2)
print(mhtn_dist)
このプログラムだけではデータが見えないのでわかりにくいのですが、真ん中の代入文はアンパック代入しています。
A = 1, B = 3
loc = [[2, 3], [1, 2], [5, 6]] の時
x1, y1 = loc[A-1]
x2, y2 = loc[B-1]
x1, y1 = [2, 3]
x2, y2 = [5, 6]
リストの A の要素と B の要素からそれぞれ2点の座標を参照してそれぞれの変数に代入し、その値を使ってマンハッタン距離を求めています。
mhtn_dist = abs(2-5) + abs(3-6)
mhtn_dist = abs(-3) + abs(-3)
mhtn_dist = 3 + 3
mhtn_dist = 6
N = int(input())
F = [0, 1]
for i in range(2, N):
F.append(F[i-2] + F[i-1])
print(*F, sep='\n')
フィボナッチ数 (Wikipedia) とは、数列に追加する数の2つ左の数と1つ左の数を足した数のことです。
初期の数列を F = [0, 1] とします。(または [1, 1])
0 + 1 = 1 [0, 1, 1]
1 + 1 = 2 [0, 1, 1, 2]
1 + 2 = 3 [0, 1, 1, 2, 3]
2 + 3 = 5 [0, 1, 1, 2, 3, 5]
3 + 5 = 8 [0, 1, 1, 2, 3, 5, 8]
この法則で並んでいる数列のことをフィボナッチ数列といいます。
プログラミングの学習中に時々登場しますので、なんとなくでもいいので記憶に留めておいてください。