#はじめに
HackerRankでPythonに取り組んでいる中で、不足していた知識や考え方を忘備録として記録します。
なお、この記事はHackerRankの答えを掲載しているものではありません。
初学者のため、間違いがある場合はご指摘いただけるとすぐに修正します。
宜しくお願いします。
#Find the Runner-Up Score!
こちらは、リストの中から二番目に大きいものを抽出するという問題でした。
問題文の詳細はコチラ
###手順
1.降順に並び替える
2.二番目に大きい値を抽出する際、最大値の被りがあることに注意する。
###必要な知識
#####sort
並び替えをする際にはsort
する。
しかし、基本的にsort
を使用すると昇順に並び替えられるので、降順にしたい場合は以下のように書く。
リスト名.sort(reverse=True)
#####whileとpop
while文とpopを用いることで最大値の被りがあっても二番目に大きい値を抽出できる。
以下で使用するリストは、降順に並んだリストであるとする。
first = リスト名.pop(0)
second = リスト名.pop(0)
while first == second:
first = second:
second=リスト名.pop(0)
この文により、最大値が複数ある場合でも二番目に大きい値を抽出できる。
#Nested Lists
二重配列の問題。先ほどと同様に、二番目に低い点数の人をアルファベット順に抽出する。
詳しい問題は、こちら
###筋道
1.点数と名前の入ったデータをインプットする
2.重複している点数がないようにする
3.重複のない配列を作成する
4.昇順に並べ替える
5.配列番号が1のものを抽出する
6.抽出したデータが複数ある場合は、複数抽出する。
###知識
#####set,list,sorted
set・・・集合。重複がなくなる
list・・・データを配列として格納する
sorted・・・sortと同じように昇順で並べる。なお、sortと異なる点は新たなリストとして作られるという点である。
これらを用いることで、先ほどの手順の2~5を内包表記で以下に示す。
二番目に低い点数 = sorted(list(set([marks for name,marks in nlist])))[1]
内包表記に関して詳しい解説はこちら
#####二番目に低い点数のデータをすべて表示する
以下のようにfor文を用いると、指定した点数のデータをすべて抽出できる。
for 名前,点数 in リスト:
if b == 該当する数字:
print 名前
改行
表示するデータを改行して表示したい場合は以下のように書く。
print ('\n'.join(表示させるデータ))
#Lists
問題はこちら
###手順
1.要件を満たす関数を作る
2.代入する
###知識
#####挿入
リストに新しいデータを挿入したい場合はinsertを使用する。
リスト.insert(インデックス,オブジェクト)
これで、指定したインデックスにオブジェクトを挿入できる。
#Find a string
文字列の中に、指定した文字がいくつあるかを表す問題。
詳しい問題はコチラ
#知識
一致しているものの数を数えるとき、for文とif文を組み合わせると便利
n = 0
for 調べる範囲:
if 一致条件:
n += 1
#まとめ
たくさん問題を解いていると、徐々に自力で解ける問題も増えてきた。
よりたくさんの知識を吸収してさらなる向上を目指したい。
再度ではありますが、初学者のため間違いがあればご指摘いただけると幸いです。