eljefeblog 

Any sufficiently advanced technology is indistinguishable from magic

python_problems

独学でPython『リスト操作』の基本を学ぶ【プログラミング基礎練習問題1】

独学でPython『リスト操作』の基本を学ぶ【プログラミング基礎練習問題1】




(Pythonの基本を初めからしっかり学びたい方はこちら↓↓)



プログラミングの基本を学んだ方からよくこのような質問を頂きます。

悩むペン銀

Pythonの基本構文を学んで、プログラミングに対する基礎知識もある程度勉強したんだけど、次に何をすればいいのか分からない。次に何をすればより成長できるか教えて欲しい



こう言った『次に何すればいいか分からない』と言う疑問に対し、



僕からの回答を言うと、



『問題を沢山解きましょう』

です。




これこそプログラミング力飛躍的に向上させる一番の近道です。




このシリーズを最後まで学習することで、これまで学んできた基礎知識を定着させ、
最終的に様々な問題をPythonを駆使して解決できるようになるはずです。



本シリーズを習得した後、
得ることができる主な知識・内容は以下4点です。


本記事の内容

  • 基礎問題を解く事でリスト操作の基礎知識を身に着けることができる
  • リスト操作を行う上で役立つ組み込み関数を自然に勉強できる
  • プログラミング的思考を養うことができる


  • この記事を書いている僕は国立大学にてCSの学位を保有しており
    エンジニアとしての仕事では現実問題を解き続けています。



    実際に問題を解いていくと今まで知らなかった便利な組み込み関数や
    新しい思考プロセスを学ぶことができます。



    それではやっていきましょう。







    (注) 問題のレベルについて



    以下に示す問題のレベルは五段階に分割しています。
    あくまでも目安なので、自分が解いてみたい問題から手をつけてみてください。
    プログラミングの勉強は継続が重要です。なので楽しさを優先しましょう!


  • very easy
  • easy
  • normal
  • difficult
  • very difficult






  • 【問題1】リスト操作 レベル: very easy


    【問】リストの最終要素を取り出せ


    引数としてリストを渡された時、リストの最終要素を取り出して値を返す関数を作成してほしい。関数名はreturn_the_last_elementとしよう。



    具体例


    実装したreturn_the_last_element関数に実際に引数を渡した場合、
    以下のような挙動か成される必要があります。

  • return_the_last_element([100,121,2,313,7]) → 7
  • return_the_last_element([3,9,2,46,4,3,1,4]) → 4
  • return_the_last_element([-1,8,33,57,36,2,0,2]) → 2



  • 注意事項



    以下の要点を満たすような設計を行います。

  • リスト要素はアルファベット小文字のみ



  • テスト


    以下のテストコードをエラー無く通過できれば正解です。
    作成した関数を以下のテンプレートに書き込んで完成させて実行してみましょう。

    # This will get executed each time the exercise gets initialized def return_the_last_element(arg): #ここにコードを入力してください return your_answer assert return_the_last_element([3,4,4,7,45,67,4]) == 4 assert return_the_last_element([5,7,3,6,2,4,5,7]) == 7 assert return_the_last_element([4,2,42,3,12,32,24]) == 24 assert return_the_last_element([3,25,2,42,23,5,663]) == 663 assert return_the_last_element([7,4,5,4,7,68,99,797,9]) == 9 print("Pass!")
    リストのインデックス、後ろからの数え方を覚えてますか?




    解答例


    
    def return_the_last_element(arg):
        return arg[-1]
    


    解説付き解答例

    
    
     def return_the_last_element(arg):
        return arg[-1] # リスト末尾より一つの要素を取り出す
    
    


    更に詳しく学ぶ+α


    Pythonのリストインデックスについて


    Pythonにおけるリストでは先頭より[0,1,2,3…
    このようにインデックスが付きますが、後方より…-3,-2,-1]と
    指定することができます。
    短いリストの時はあまり有り難みが感じにくいですが、リスト長が長くなるほど便利さを感じるはずです。頻繁に使うことになるので覚えておきましょう。











    【問題2】リスト操作 レベル: easy


    【問】文字列先頭のアルファベットを基準にリスト内要素を並び替えよ


    引数として受け取る文字列要素を格納しているリストにおいて、文字列の先頭アルファベットを基準に並び替え、その値を返すsort_elements関数を実装せよ。




    具体例


    作成したsort_elements関数に引数を与えた時、
    結果は以下のようになります。

    sort_elements(["England","America","Japan"])→['America', 'England', 'Japan']
    sort_elements(["Apple","Orange","Tomato","Melon"])→['Apple', 'Melon', 'Orange', 'Tomato']
    sort_elements(["Watch","Boots","Coat","Pants"])→['Boots', 'Coat', 'Pants', 'Watch']
    sort_elements(["Apple","Amazon","Facebook","Google"])→['Amazon', 'Apple', 'Facebook', 'Google']



    注意事項


    以下の要件にしたがって関数を設計してください

  • リスト内には文字列以外の要素が含まれないようにすること


  • テスト


    以下のテストコードをエラー無く通過できれば正解です。
    あなたの回答を書き込んで関数を完成させ、確認してみましょう。

    # This will get executed each time the exercise gets initialized def sort_elements(arg): """ここにコードを入力してください"""    return your_answer assert sort_elements(['Book','Signal','Bread','Desk']) == ['Book', 'Bread', 'Desk', 'Signal'] assert sort_elements(['People','Animal','Beat','Snap','Tea']) == ['Animal', 'Beat', 'People', 'Snap', 'Tea'] assert sort_elements(['English','Japanese','French','Spanish']) == ['English', 'French', 'Japanese', 'Spanish'] print("Pass!")
    組み込み関数のsortedを使うと簡単ですね。



    解答例


    少なくとも10分間は自分の頭で考えて問題を解きましょう。
    10分考えても解法が浮かばない場合は解答例を見て、問題の解き方を学んでください。

    
    def sort_elements(arg):
        result=sorted(arg)
        return result





    解説付き解答例

    
    def sort_elements(arg):
        result=sorted(arg) #sorted関数を利用してリストを昇順に並び替える
        return result
          


    更に深く学ぶ+α

    Pythonリストをソートできるsortとsorted関数


    Pythonにおいてリストを昇順もしくは降順にソートする際、データ型関数としてsort()と組み込み関数のsorted()の二つの関数が用意されています。主な違いとしては以下です。

    • sort(): 元々のリストをソートする
    • sorted(): ソートした新しいリストを生成する

    簡単に紹介していきます。


    データ型関数sort()について


    sort()はPythonのリストにおけるデータ型関数です。
    主に以下のような挙動を実現します。

    list_ = [3,5,2,4,53,2] list_.sort()
    print(list_)
    #[2, 2, 3, 4, 5, 53]


    この際デフォルトでは昇順にソートされる為、降順にソートしたい場合には引数としてreverseをTrueに設定する必要があります。
    list_.sort(reverse=True)
    print(list_)
    #[53, 5, 4, 3, 2, 2]


    組み込み関数sorted()について


    sortedはPythonの組み込み関数として初めから用意されている関数です。 引数にソートしたいリストを指定し、ソートされた新たなリストを生成します。元々のリストは変更されない点が注意点です。

    list_ = [3,4,2,3,52,232,3] new_list = sorted(list_)
    print(new_list)
    #[2, 3, 3, 3, 4, 52, 232]


    sorted()sort()と同様にデフォルトで昇順になるように並び替える関数です。降順にソートしたい場合はreverseをTrueに設定します。

    sortedは文字列も並び替えることができる


    sorted()は受け取ったリスト内要素の文字列をアルファベット順に並び返すことができます。

    list_ = ['e', 'b', 'a', 'c', 'd'] new_list = sorted(['e', 'b', 'a', 'c', 'd'])
    print(new_list)
    # ['a', 'b', 'c', 'd', 'e']

    今回の問題ではこの組み込み関数を活用することで解くことができます。
    とても役に立つ関数なので覚えておくとよいでしょう。











    【問題3】リスト操作 レベル: normal



    【問】リスト内要素から最小値を見つけ出し、各々の合計を返せ



    引数で渡された描くリスト内要素より最小値を見つけ出し、それらの合計を少数第一位以下切り捨てで返す関数sum_minimumsを実装せよ。




    具体例


    実装したsum_minimums関数に与える引数とその結果は以下のようになるようにしましょう。

    sum_minimums([1,2,31],[4,24,3],[3,23,4]])→ 7
    sum_minimums([3,23],[42,5,78],[6,8],[3,23,4,1])→ 15
    sum_minimums([3,2,3,423,3,8],[32,3,2,24],[0,3,23,13])→ 4




    注意事項


    以下の要点を満たすような設計を行います。

  • 戻り値はstring型ではなくint型にせよ



  • テスト


    以下のテストコードをエラー無く通過できれば正解です。
    あなたの回答を書き込んで関数を完成させ、確認してみましょう。

    # This will get executed each time the exercise gets initialized def sum_minimums(arg): #ここにコードを入力してください return your_answer assert sum_minimums([[3,23,3,23],[64,4,34,3]]) == 6 assert sum_minimums([[6,75],[2,8,3],[86,3,6,4]]) == 11 assert sum_minimums([[33333,233223],[57775,3222323,444]]) == 33777 assert sum_minimums([[77,75],[2422,32],[6,9,676]]) == 113 print("Pass!")
    min()sum()の二つの関数をうまく使うといいかも。。




    解答例


    少なくとも10分間は自分の頭で考えて問題を解きましょう。
    10分考えても解法が浮かばない場合は解答例を見て、問題の解き方を学んでください。

    
    def sum_minimums(arg):
        minimums=[]
        for lis in arg:
            min_scalar = min(lis)
            minimums.append(min_scalar)
        result = sum(minimums)
        return result
          





    解説付き解答例

    
    def sum_minimums(arg):
        minimums=[]
        for lis in arg:
            min_scalar = min(lis) #組み込み関数min()を利用して最小値を見つけ出す
            minimums.append(min_scalar)
        result = sum(minimums) #組み込み関数sum()を利用してリスト内要素の合計を求める
        return result
          






    続編はこちら↓

    人気記事【初学者必見】効率的なプログラミング勉強方法を紹介します







    このエントリーをはてなブックマークに追加
    data-ad-format="rectangle" data-ad-format="rectangle"

    返信する

    メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

    某国立大学大学院(理系)に所属しています。 最近の趣味は人工知能関連の論文を読む事で 研究ではComputer Vision周りを中心に活動しており、 サイドワークとしてデータ分析の業務に関わっています。 本ブログはこれまで筆者が学んできた様々な知識の中から 有益だと思えた情報のみをまとめたものです。 内容は個人の見解であり、所属する機関と関係するものではありません。 Research: is related to Computer Vision Hobby: is to study Artificial Intelligence / Machine Learning.