🔙
🔝

【paiza問題集 解説】
配列メニュー

【次元配列の入出力】i番目の出力 Boss

【次元配列の入出力】i番目の出力 Boss

STEP: 1 要素数の出力

要素数の出力

    a = [5, 1, 3, 4, 5, 12, 6, 8, 1, 3]
    print(len(a))
    

    要素数を数えるlen()を使います。

STEP: 2 全要素の出力

全要素の出力

  • 例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()文の書き方は今後も積極的に使用していきます。

STEP: 3 i 番目の出力

i 番目の出力

    a = [5, 1, 3, 4, 5, 12, 6, 8, 1, 3]
    print(a[3])
    

    リストは 0 番目から数えますので、「数列の 4 番目」の 4 から 1 を引く必要があります。

STEP: 4 配列の入力 1

配列の入力 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 全要素の出力」と全く同じです。

STEP: 5 配列の入力 2

配列の入力 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章 標準入力」で解説しています。

STEP: 6 配列の入力 3

配列の入力 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の書き方でしか使いません。簡単でラクな方法を使っていきましょう。

STEP: 7 i番目の出力 1

i番目の出力 1

    K = int(input())
    a = [1, 3, 5, 4, 6, 2, 1, 7, 1, 5]
    print(a[K-1])
    

    リストは 0 番目から数えますので、K から 1 を引く必要があります。

STEP: 8 i番目の出力 2

i番目の出力 2

    K = int(input())
    a = list(map(int, input().split()))
    print(a[K-1])
    

    リストは 0 番目から数えますので、K から 1 を引く必要があります。

FINAL問題 【次元配列の入出力】i番目の出力 Boss

【次元配列の入出力】i番目の出力 Boss

    _, K = map(int, input().split())
    a = list(map(int, input().split()))
    print(a[K-1])
    

    リストは 0 番目から数えますので、K から 1 を引く必要がありますと何度言わせれば・・・。😆

【二次元配列の入出力】i番目の出力 Boss

【二次元配列の入出力】i番目の出力 Boss

STEP: 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章 二次元リスト」で学習できます。


STEP: 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つ、要素のリストを取り出して画面に出力します。

STEP: 3 行数の出力

行数の出力

    a = [[1, 2, 3], [4, 5, 6], [8, 1, 3]]
    print(len(a))
    

    慣れるまでは行と列がどっちがどっちか混乱するかもしれませんが、行は一次元配列側です。簡単なほうですね。😁

STEP: 4 列数の出力

列数の出力

    a = [[1, 2, 3, 4], [6, 5, 4, 3], [3, 1, 8, 1]]
    print(len(a[0]))
    

    リストになっている要素の1つの要素数を数えるだけです。

STEP: 5 各行の要素数の出力

各行の要素数の出力

    a = [[1], [2, 3], [4, 5, 6]]
    for nums in a:
        print(len(nums))
    

    列数が要素数に変わりました。列数と違って、要素数は不揃いの場合もあります。使っている言葉が違うだけで同じものとも言えなくもないです。

    ループを使って1つ1つ、リストの要素数を数えていくだけでおっけ。👍

STEP: 6 i 行目 j 列目の出力

i 行目 j 列目の出力

    a = [[1, 2, 3], [8, 1, 3], [10, 100, 1]]
    print(a[1][2])
    

    添字の最初が [行]、次が [列] となります。

STEP: 7 二次元配列の入力 1

二次元配列の入力 1

    a = [[1, 3, 5, 7], [8, 1, 3, 8]]
    for nums in a:
        print(*nums)
    

    「STEP: 2 全要素の出力」と同じです。

STEP: 8 二次元配列の入力 2

二次元配列の入力 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章 標準入力」で解説しています。

STEP: 9 二次元配列の入力 3

二次元配列の入力 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)
    

    この標準入力の方法は非常に多くの箇所で使います。

STEP: 10 二次元配列の入力 4

二次元配列の入力 4

  • 例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つ前の問題と同じです。

STEP: 11 i番目の出力 1

i番目の出力 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 から始まりますので、KL それぞれから 1 を引きます。

STEP: 12 i番目の出力 2

i番目の出力 2

    K, L = map(int, input().split())
    a = [list(map(int, input().split())) for _ in range(3)]
    print(a[K-1][L-1])
    

    要素番号は 0 から始まりますので、KL それぞれから 1 を引きます。

FINAL問題 【二次元配列の入出力】i番目の出力 Boss

【二次元配列の入出力】i番目の出力 Boss

    N, _, K, L = map(int, input().split())
    a = [list(map(int, input().split())) for _ in range(N)]
    print(a[K-1][L-1])
    

    要素番号は 0 から始まりますので、KL それぞれから 1 を引きます。くどいね。😓

【配列の検索】何個ある? Boss

【配列の検索】何個ある? Boss

STEP: 1 配列に含まれている? 1

配列に含まれている? 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章 リスト型データを使いこなす機能一覧」で解説しています。

STEP: 2 配列に含まれている? 2

配列に含まれている? 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」と同じ書き方です。

STEP: 3 配列に含まれている? 3

配列に含まれている? 3

    _, M = map(int, input().split())
    a = list(map(int, input().split()))
    if M in a:
        print('Yes')
    else:
        print('No')
    

    データが標準入力に変わっただけで、1つ前の問題「配列に含まれている? 2」と同じ書き方です。

STEP: 4 何番目にある? 1

何番目にある? 1

  • 例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()メソッドがやっていると思ってください。

STEP: 5 何番目にある? 2

何番目にある? 2

  • 例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」とほぼ同じになります。

STEP: 6 何番目にある? 3

何番目にある? 3

  • 例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」とほぼ同じになります。

STEP: 7 何個ある? 1

何個ある? 1

  • 例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()メソッドを使いましょう。😉

STEP: 8 何個ある? 2

何個ある? 2

  • 例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」とほぼ同じです。

FINAL問題 【配列の検索】何個ある? Boss

【配列の検索】何個ある? Boss

  • 例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」とほぼ同じになります。

【文字列の配列】辞書順に出力 Boss

【文字列の配列】辞書順に出力 Boss

STEP: 1 配列の書き換え

配列の書き換え

    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つです。

    1. 値A の探索
    2. 値A を 値B に書き換える
    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 を画面に出力して完了です。

STEP: 2 2 変数の入れ替え

2 変数の入れ替え

  • 例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の方法は 基本情報技術者試験 という国家試験の内容にも盛り込まれています。資格に興味は無くても、憶えていて損はありません。

STEP: 3 配列の要素の入れ替え

配列の要素の入れ替え

  • 例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]]
    ↑ 黄色の整数部分はスワップできる

    リストのスワップは別の方法でできるのですが、それは近い将来、自力で気付ける日が来るはずです。この「配列メニュー」にもそのヒントがありますので、それは今日かもしれない!🐱

STEP: 4 部分配列

部分配列

    A, B, N = map(int, input().split())
    a = list(map(int, input().split()))
    print(*a[A-1:B], sep='\n')
    

    スライスを使えば解決です。A から 1 を引くのを忘れずに。B はそのままで大丈夫です。

    スライスは「2章 リスト型」で学習できます。

STEP: 5 配列の連結

STEP: 5 配列の連結

    _ = input()
    a = list(map(int, input().split()))
    b = list(map(int, input().split()))
    
    c = a + b
    print(*c, sep='\n')
    

    リストとリストは、プラスの符号 + で繋げることができます。意外に簡単!

STEP: 6 配列のソート

配列のソート

  • 例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章リスト型データを使いこなす機能一覧」のこちらで少しだけ解説しています。

STEP: 7 配列の反転

配列の反転

  • 例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 のデータを書き換えています。反転前のデータを保持しておく必要が無い時は、こちらのメソッドが便利です。

STEP: 8 要素のカウント

要素のカウント

    _, M = map(int, input().split())
    a = list(map(int, input().split()))
    print(a.count(M))
    

    .count()は、指定した値が、リストの中にいくつ含まれているかを数えるメソッドです。

STEP: 9 配列末尾への追加

配列末尾への追加

    _, M = map(int, input().split())
    a = list(map(int, input().split()))
    a.append(M)
    print(*a, sep='\n')
    

    .append()は、引数の値をリストの末尾に要素として追加します。使用頻度極大なので勝手に覚えてしまいます。😹

STEP: 10 要素の削除

要素の削除

  • 例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は、リストの中の指定した要素番号の要素を取り出します。こちらは取り出した要素の値に化けますが、変数に代入したり直接使ったりしないとそのまま消滅してしまいます。結果、削除と同様の形になります。

STEP: 11 要素の挿入

要素の挿入

    _, M, K = map(int, input().split())
    a = list(map(int, input().split()))
    a.insert(M-1, K)
    print(*a, sep='\n')
    

    .insert(要素番号, 値)は、リストの要素番号に値を挿入します。

STEP: 12 要素数の出力

要素数の出力

    s = ['Hello', 'paiza', '1234', 'pa13']
    print(len(s))
    

    要素の値が文字列であっても、どんな型であっても、型が混在していても、len()関数は要素の数をなんでも数えます。

STEP: 13 全要素の出力

全要素の出力

  • 例1

  • s = ['good', 'morning', 'paiza', '813', 'pa13']
    print(*s, sep='\n')
    
  • 例2

  • s = ['good', 'morning', 'paiza', '813', 'pa13']
    print('\n'.join(s))
    

    要素の値が文字列であっても、どんな型であっても、要素を操作するだけなので数値を扱う時とと大差ありません。

    ただし要素が文字列の場合に限り.join()メソッドが使えます。

STEP: 14 i 番目の出力

i 番目の出力

    s = ['good', 'morning', 'paiza', '813', 'pa13']
    print(s[2])
    

    リストは 0 番目から数えますので、3 から 1 を引く必要があります。

STEP: 15 文字列の配列の入力 1

文字列の配列の入力 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 全要素の出力」の繰り返しになります。

STEP: 17 文字列の配列の入力 3

文字列の配列の入力 3

    _ = input()
    s = input().split()
    print(*s, sep='\n')
    

    N は使いませんので、1つ前の「文字列の配列の入力 2」とほぼ同じになります。

STEP: 18 i 番目の出力 1

i 番目の出力 1

    N = int(input())
    s = ['good', 'morning', 'paiza', '813', 'pa13']
    print(s[N-1])
    

    リストは 0 番目から数えますので、N から 1 を引く必要があります。

STEP: 19 i 番目の出力 2

i 番目の出力 2

    N = int(input())
    s = input().split()
    print(s[N-1])
    

    データが標準入力に変わっただけで、1つ前の「i 番目の出力 1」と同じです。

STEP: 20 i 番目の出力 3

i 番目の出力 3

    N, _ = map(int, input().split())
    s = input().split()
    print(s[N-1])
    

    M は使いませんので、1つ前の「i 番目の出力 2」と同じです。

STEP: 21 i 番目の出力 4

i 番目の出力 4

    N, _, L = map(int, input().split())
    s = input().split()
    print(s[N-1][L-1])
    

    M は使(ry

STEP: 22 辞書順に出力 1

辞書順に出力 1

  • 例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なのに手動でソートを求めてくるとかキティク!とか思ってしまいましたが、普通に関数やメソッドを使っていいみたいです。

STEP: 23 辞書順に出力 2

辞書順に出力 2

  • 例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」とほぼ同じです。

STEP: 24 辞書順に出力 3

辞書順に出力 3

  • 例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」と同じです。

FINAL問題 【文字列の配列】辞書順に出力 Boss

【文字列の配列】辞書順に出力 Boss

  • 例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 を引く必要があります。やっと終わった。😅

フィボナッチ数

フィボナッチ数

STEP: 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()関数一択となります。

STEP: 2 配列の最大最小

配列の最大最小

    N = int(input())
    a = list(map(int, input().split()))
    print(max(a), min(a))
    

    max()min()でリストの要素の最大値と最小値が取得できます。

STEP: 3 ある数以上以下の要素の列挙 1

ある数以上以下の要素の列挙 1

    _ = int(input())
    a = list(map(int, input().split()))
    for i in a:
        if i >= 5:
            print(i)
    

    を使って先頭から順に「 5 以上」の要素を画面に出力していきます。

STEP: 4 ある数以上以下の要素の列挙 2

ある数以上以下の要素の列挙 2

    _, K = map(int, input().split())
    a = list(map(int, input().split()))
    for i in a:
        if i >= K:
            print(i)
    

    を使って先頭から順に「 K 以上」の要素を画面に出力していきます。

STEP: 5 ある数以上以下の要素の列挙 3

ある数以上以下の要素の列挙 3

    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) は型が異なりますが、混在して計算式に使ったり比較したりすることができます。

STEP: 6 二点間の距離 1

二点間の距離 1

    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| という様に書きます。

    例)
    |-5|=5  負数 → 正数
    |3|=3   正数 → 正数

    この |x|abs(x)です。

    |x1-x2|+|y1-y2|=abs(x1-x2) + abs(y1-y2)

    マンハッタン距離の意味がわからなくても親切に式を与えてくれますので、とりあえず | | があったらその部分をabs()で書けばよいということを知っておけば、あとは何とかなるはずです。😅

    この他にも、場合によっては自分で「ここはabs()を使えばイケるかも!」とひらめきで使うこともあります。使用頻度は高くないのですが、使わないことはありませんので忘れずに覚えておいてください。

STEP: 7 二点間の距離 2

二点間の距離 2

    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
    
FINAL問題 フィボナッチ数

フィボナッチ数

    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]

    この法則で並んでいる数列のことをフィボナッチ数列といいます。
    プログラミングの学習中に時々登場しますので、なんとなくでもいいので記憶に留めておいてください。

♦ メソッド・関数まとめ ♦

メソッド・関数まとめ