第33回【Python】何番目にある? 1、何番目にある? 2、何番目にある? 3
現在取り組んでいるのは、paiza ラーニング問題集「配列メニュー」になります。
はじめに
猫とキャンプと野球観戦と AWS が大好きな旦那、LeoSaki です。モフモフしたい。
Python をゼロから勉強してみよう、のコーナー 33 回目です。
みんな違ってみんないくない。コードがみんな違っていたら困ります。ということを、会社でひしひしと感じました。コメントがないので、読み解くのに時間がかかった・・・。
それでは、今日も頑張ってみようと思います。
何番目にある? 1
以下のような配列があります。
1 10 2 9 3 8 4 7 5 6
この配列の中で、8 が左から何番目にあるか出力してください。
左端を 1 番目とします。
要素を一つずつ検査する方法をとるか、もっと簡単な方法をとるか、学習という意味では・・・両方でしょ。(前回と同じ)
ちょっとだけ天邪鬼で、enumrate を利用してみた。昔々、Python の学習を始めた頃、enumrate を知ったときは衝撃でした。こんな便利な関数があるんだ、と・・・。
Python
L = [1, 10, 2, 9, 3, 8, 4, 7, 5, 6]
for i,val in enumerate(L):
if val == 8:
print(i + 1)
break
Python
L = [1, 10, 2, 9, 3, 8, 4, 7, 5, 6]
print(L.index(8) + 1)
VBA
L = Array(1, 10, 2, 9, 3, 8, 4, 7, 5, 6)
For i = 0 To UBound(L)
If L(i) = 8 Then
Debug.Print i + 1
Exit For
End If
Next
何番目にある? 2
整数 N が与えられます。
整数 N が、以下の配列の左から何番目にあるか出力してください。
左端を 1 番目とし、N は以下の配列に必ず含まれるものとします。
1 5 9 7 3 2 4 8 6 10
すべてのテストケースにおいて、以下の条件をみたします。
・N は与えられた配列内に必ず含まれる。
入力例
5
何番目にあるかという要素を標準入力から受けるパティーン。
Python
N = int(input())
L = [1, 5, 9, 7, 3, 2, 4, 8, 6, 10]
for i,val in enumerate(L):
if val == N:
print(i + 1)
break
Python
N = int(input())
L = [1, 5, 9, 7, 3, 2, 4, 8, 6, 10]
print(L.index(N) + 1)
VBA
N = Cells(1, 1)
L = Array(1, 5, 9, 7, 3, 2, 4, 8, 6, 10)
For i = 0 To UBound(L)
If L(i) = N Then
Debug.Print i + 1
Exit For
End If
Next
何番目にある? 3
1 行目に整数 N, M が与えられます。
2 行目に M 個の整数 a_1, a_2, …, a_M が与えられます。
整数 N が、M 個の整数の左から何番目にあるか出力してください。
左端を 1 番目とし、N は M 個の整数に必ず 1 つだけ含まれるものとします。
すべてのテストケースにおいて、以下の条件をみたします。
・M は 1 以上 10 以下の整数
・N, a_i (1 ≦ i ≦ M) は 1 以上 10 以下の整数
・N は M 個の整数の中に必ず 1 つだけ含まれる
入力例
3 5
1 2 3 4 5
すべてを標準入力から受け取るパティーン。
Python
N,M = map(int,input().split())
L = list(map(int,input().split()))
for i,val in enumerate(L):
if val == N:
print(i + 1)
break
Python
N,M = map(int,input().split())
L = list(map(int,input().split()))
print(L.index(N) + 1)
VBA
NM = Split(Cells(1, 1), " ")
N = NM(0)
M = Val(NM(1))
S = Split(Cells(2, 1), " ")
For i = 0 To M - 1
If S(i) = N Then
Debug.Print i + 1
Exit For
End If
Next
今回も型を意識しないといけない。数値と文字列で比較しても絶対にイコールにはならない。前回同様、いちいちすべてを数値に変換するのが面倒だったので、文字列と文字列で比較するように書いてみた。
最後に
簡単に求めることができる関数があるのは知っている。それでも、正攻法(?)で答えを求める方法を知っていれば、いろんなところで応用が利きそう。って偉そうなことを書いておいて、今回はちょっとだけ天邪鬼だったのだけれど。
何万行というデータ量であったときに、便利な関数を使うのと正攻法で攻めるのと、どのくらいの時間差が生じるのかは正直わからない。そのうち、時間ができれば試してみたいところ。
引き続き、よろしくお願いいたします!
ディスカッション
コメント一覧
まだ、コメントがありません