第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

今回も型を意識しないといけない。数値と文字列で比較しても絶対にイコールにはならない。前回同様、いちいちすべてを数値に変換するのが面倒だったので、文字列と文字列で比較するように書いてみた。

最後に

簡単に求めることができる関数があるのは知っている。それでも、正攻法(?)で答えを求める方法を知っていれば、いろんなところで応用が利きそう。って偉そうなことを書いておいて、今回はちょっとだけ天邪鬼だったのだけれど。

何万行というデータ量であったときに、便利な関数を使うのと正攻法で攻めるのと、どのくらいの時間差が生じるのかは正直わからない。そのうち、時間ができれば試してみたいところ。

引き続き、よろしくお願いいたします!

Python学習,Python,paiza

Posted by LeoSaki