電気エネルギーの流れと設計 2025.12.03

文字列・リスト

Back to index page


  1. 本日の内容
  2. 反復処理 続き
    1. for 文
    2. 繰り返す回数が決まっている場合には for 文が便利です.for 文の基本形は以下のようなものです.

      for i in range(a, b):
          do something
      

      for の次に繰り返しの回数に関与する変数を提示し,in 関数でその中に含まれる条件のときに文を実行します.in 関数は次の range 関数を参照します.range 関数は最初の数以上で2番目の数未満の整数を順に返します.実際に例を見た方が速いので,そちらを見てみましょう.

      for i in range(1, 11):
          print(i, end = ' ')
      else:
          print()
      

      実行結果は以下のようになります.

      1 2 3 4 5 6 7 8 9 10 
      

      もうちょっとひねりを入れたものも見てみましょう.2桁の正の整数を乱数により2つ発生させ,その小さい方の数から大きい方の数まで表示するものです.

      from random import randint
      
      small = randint(10, 99)
      large = randint(10, 99)
      
      if small > large:
          small, large = large, small
      
      print(f'Integers from {small} to {large}: ', end = '')
      
      for i in range(small, large + 1):
          print(i, end = ' ')
      else:
          print()
      

      Integers from 29 to 49: 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49

      演習

      1. 2桁の正の整数を乱数により10個発生させ,その合計を求めるプログラムを作成しましょう.
      2. 56 67 16 38 67 16 51 67 66 83 
        The sum of above numbers: 527
        

        考え方

        合計を入れておく変数を初期値 0 で定義する
        乱数を発生させ,画面に表示する
        乱数の値を合計の変数に += で追加する
        上の処理を10回繰り返す
        

        解答例

      3. 2桁の正の整数を乱数により10個発生させ,その最大値と最小値を求めるプログラムを作成しましょう.
      4. 22 18 85 51 17 84 46 89 73 40 
        The maximum and minimum of above numbers: 89, 17
        

        考え方

        最大値を入れておく変数を初期値 0 で定義する(10未満の数なら何でもよい)
        最小値を入れておく変数を初期値 100 で定義する(100以上の数なら何でもよい)
        乱数を発生させ,画面に表示する
        乱数の値が最大値よりも大きかったら乱数の値を新たに最大値とする
        乱数の値が最小値よりも小さかったら乱数の値を新たに最小値とする
        上の処理を10回繰り返す
        

        解答例

  3. 文字列
    1. 文字列とインデックス
    2. 11月19日のテキストで文字列を値として持つ変数の例を紹介しました.例えば,以下のようなものです.

      strg = '123'
      

      文字列はその中に含まれる各文字にインデックス(指数)を利用してアクセスできます.例えば,上の文字列 strg の3文字目だけを表示させるプログラムは以下のようになります.

      strg = '123'
      
      print(strg[2])
      

      3
      

      インデックスは 0 から始まることに注意してください.変数 strg のインデックスと要素の関係は以下のようになっています.

      インデックス
      0'1'
      1'2'
      2'3'

    3. 文字列オブジェクトの操作
    4. 文字列は複数の値を一つの名前でまとめたオブジェクトで,この後学習する配列の一形態です.複数の値を持っているということで,それらの値の並べ替えや削除が可能です.

      strg = 'shimane'
      
      print(''.join(sorted(strg)))
      print(strg.strip('e'))
      print(strg.replace('s', 'S'))
      

      実行すると結果は以下のようになります.

      aehimns
      shiman
      Shimane
      

      演習問題

      1. 4桁の正の整数を乱数により1つ発生させ,それを数字の小さい順と大きい順に並べ替えるプログラムを作成しましょう.
      2. Random number with 4 digits: 1582
        Sorted: 1258, Reversed: 8521
        

        手順:
        
        数値の文字列化は str 関数を使用 str(num)
        逆順の sort は引数に reverse = True を追加 sorted(strg, reverse = True)
        

        解答例

  4. リスト
  5. すべてのプログラミング言語には複数の値を一つの名前で扱える仕組みがあり,通常配列(array)と呼ばれています.Python では配列に関係するオブジェクトが複数あり,その一つがリスト(list)です.前項で扱った文字列はリストの一つです.

    1. リストの性質
    2. リストの性質としては以下のようなものがあります.

    3. リストの生成
    4. リストは [ ] の中に要素をカンマで区切って並べます.数値(int 型も float 型も)そのまま記述するだけですが,文字列は引用符 ' ' で囲います.値だけでなく変数なども要素に入れられますし,リストも要素にできます.要素の型が混在していても問題ありません.

      num_lst = [2, 3, 5, 7, 11]
      str_lst = ['Gu', 'Choki', 'Pa']
      
      num = 13
      num_lst2 = [2, 3, 5, 7, 11, num]
      
      sub_lst = [17, 19, 23]
      num_lst3 = [2, 3, 5, 7, 11, num, sub_lst]
      
      mix_lst = [1, 'a', 2, 'bc', 3]
      
      print(num_lst)
      print(str_lst)
      print(num_lst2)
      print(num_lst3)
      print(mix_lst)
      

      [2, 3, 5, 7, 11]
      ['Gu', 'Choki', 'Pa']
      [2, 3, 5, 7, 11, 13]
      [2, 3, 5, 7, 11, 13, [17, 19, 23]]
      [1, 'a', 2, 'bc', 3]
      

    5. リストのインデックス
    6. 上のプログラムを少し変更して特定の要素だけを表示させてみましょう.

      num_lst = [2, 3, 5, 7, 11]
      str_lst = ['Gu', 'Choki', 'Pa']
      
      num = 13
      num_lst2 = [2, 3, 5, 7, 11, num]
      
      sub_lst = [17, 19, 23]
      num_lst3 = [2, 3, 5, 7, 11, num, sub_lst]
      
      mix_lst = [1, 'a', 2, 'bc', 3]
      
      print(num_lst[0])
      print(str_lst[1])
      print(num_lst2[2])
      print(num_lst3[6][1])
      print(mix_lst[1:3])
      

      2
      Choki
      5
      19
      ['a', 2]
      

      リストの中にリストが入ると,インデックスが2次元になります.下から2つ目の print 文にある [6][1] というインデックスは sub_lst の 1 番目ということで 19 になります.また,最後のコロンで区切っているのはスライスで,1 番目から 2 番目までを表示させます.

    7. 反復処理によるリストの生成
    8. リストについてインデックス順に操作することで反復処理によりリストを作ることができます.方法は,一つは一度空のリストを作っておいて要素を追加するものと,内包表記という方法があります.

      1. None を用いる方法
      2. from random import randint
        
        lst = [None] * 5
        print(lst)
        
        for i in range(0, 5):
            lst[i] = randint(10, 99)
        
        print(lst)
        

        [None, None, None, None, None]
        [99, 48, 79, 68, 45]
        

        None は何もないことを意味する定数で,値は無く要素が入る場所だけ確保する動作になります.
      3. 内包表記
      4. 内包表記はちょっと難しい概念ですが,慣れると便利な機能です.

        from random import randint
        
        lst = [randint(10, 99) for _ in range(5)]
        
        print(lst)
        

        [47, 70, 56, 15, 28]
        

        リストの中に for 文が入っています.また,for の次に下線文字 _ が来ていますが,わざわざ変数を定義しなくても range 関数は引数 5 に対して 0, 1, 2, 3, 4 を作るので,それがそのまま使用されるということです.

    9. アンパック
    10. リストのような一つにまとまった値を個々の要素に分けることをアンパックと言います.リストの名前の前にアスタリスク * をつけることで要素をバラバラにできます.print 関数の引数に使用すると,一つ一つの値をスペースで分けて表示します.

      from random import randint
      
      lst = [randint(10, 99) for _ in range(5)]
      
      print(*lst)
      

      29 79 76 36 55
      

      演習問題

      1. 2桁の正の整数を2つ乱数により発生させて,その小さい方の数から大きい方の数までを要素に持つリストを作成し,表示させるプログラムを作成しましょう.
      2. 2 random numbers with 2 digits: 48, 96
        48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96

        解答例

  6. タプル
  7. Python にはリスト以外にいくつか配列がありますが,タプルという面白い構造があります.リストと違うのは要素の変更ができないこと(イミュータブル)ですが,それによりリストよりも動作が高速になります.変更する必要が無い要素の列を扱う場合にはタプルの使用が推奨されています.

    前回の月別の日数の問題などはタプルを使用すると in 関数と組み合わせて以下のようにより簡単になります.

    from random import randint
    
    month = randint(1, 12)
    print(f'Month: {month}')
    
    if month == 2:
        print('Days: 28')
    elif month in (4, 6, 9, 11):
        print('Days: 30')
    else:
        print('Days: 31')
    

    Month: 9
    Days: 30
    


Back to index page