独学でPython『リスト操作』の基本を学ぶ【プログラミング基礎練習問題1】
(Pythonの基本を初めからしっかり学びたい方はこちら↓↓)
プログラミングの基本を学んだ方からよくこのような質問を頂きます。
悩むペン銀
Pythonの基本構文を学んで、プログラミングに対する基礎知識もある程度勉強したんだけど、次に何をすればいいのか分からない。次に何をすればより成長できるか教えて欲しい
こう言った『次に何すればいいか分からない』と言う疑問に対し、
僕からの回答を言うと、
『問題を沢山解きましょう』
です。
これこそプログラミング力飛躍的に向上させる一番の近道です。
このシリーズを最後まで学習することで、これまで学んできた基礎知識を定着させ、
最終的に様々な問題をPythonを駆使して解決できるようになるはずです。
本シリーズを習得した後、
得ることができる主な知識・内容は以下4点です。
本記事の内容
この記事を書いている僕は国立大学にてCSの学位を保有しており
エンジニアとしての仕事では現実問題を解き続けています。
実際に問題を解いていくと今まで知らなかった便利な組み込み関数や
新しい思考プロセスを学ぶことができます。
それではやっていきましょう。
目次
(注) 問題のレベルについて
以下に示す問題のレベルは五段階に分割しています。
あくまでも目安なので、自分が解いてみたい問題から手をつけてみてください。
プログラミングの勉強は継続が重要です。なので楽しさを優先しましょう!
【問題1】リスト操作 レベル: very easy
【問】リストの最終要素を取り出せ
引数としてリストを渡された時、リストの最終要素を取り出して値を返す関数を作成してほしい。関数名はreturn_the_last_elementとしよう。
具体例
実装したreturn_the_last_element関数に実際に引数を渡した場合、
以下のような挙動か成される必要があります。
注意事項
以下の要点を満たすような設計を行います。
テスト
以下のテストコードをエラー無く通過できれば正解です。
作成した関数を以下のテンプレートに書き込んで完成させて実行してみましょう。
# 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
注意事項
以下の要点を満たすような設計を行います。
テスト
以下のテストコードをエラー無く通過できれば正解です。
あなたの回答を書き込んで関数を完成させ、確認してみましょう。
# 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
続編はこちら↓