#まえがき
AtCoderでよく使うなと思いながらも書き方を忘れたりする知識をメモとして残す意味合いもあって書いていこうと思います。説明が浅いので詳しく知りたい場合は他の記事なども見てください。
#listの中にある要素が何番目にあるか検索
if a in data
などで変数aはdataのlistに含まれているかどうかの確認をすることがよくあります。ですが何番目に入っているか、というものを簡単に書いて返せるものがあればなと思っていたらあって感動したので紹介します。
box = [4, 2, 1, 0, 3]
print(box.index(3))
#4
このようにindex()
を用いることで3という値は4番目にあるよという答えを返してくれます。
#多次元リストにてkeyを複数指定してsortする
見出しの言い方はとても難しいですが簡単に言えば多次元listをsortするときの優先順位を決めれるよって感じです。これでも難しいとは思いますが...
box = [[1,1,8], [8,6,4], [5,9,8]]
このような多次元リストがあった場合にふと、こう思うときがあると思います。
「昇順に並べたいけど3番目の数字、1番目の数字、2番目の数字の順番で昇順にしてほしいんだよなー」
こうなったときにlambda式が活躍します。
box = [[1,1,8], [8,6,4], [5,9,8]]
box_sort = sorted(box)
print(box_sort)
#[[1, 1, 8], [5, 9, 8], [8, 6, 4]]
box_sort = sorted(box, key=lambda box_i:(box_i[2], box_i[0], box_i[1]))
print(box_sort)
#[[8, 6, 4], [1, 1, 8], [5, 9, 8]]
こうするとできます。sortするときの優先順位が書く順番でsortするので結果も変わってきます
下の見出しにて類題がありますのでそちらもご覧ください。
lambda式についての説明は省きます。
参考文献([Python] 多次元リストを複数キーでソートする)
#多次元リストにてkeyを複数指定して昇順、降順どっちもしたいとき
box=[[1,1,8], [8,6,4], [5,9,8]]
このような多次元リストがあった場合にふと、こう思うときがあると思います。
「3番目の数字、1番目の数字、2番目の数字の順番で昇順、降順、昇順にしてほしいんだよなー」
こうなったときは上の見出しではできないんじゃないの??と思いますが
box = [[1,1,8], [8,6,4], [5,9,8]]
box_sort = sorted(box, key=lambda box_i:(box_i[2], box_i[0], box_i[1]))
print(box_sort)
#[[8, 6, 4], [1, 1, 8], [5, 9, 8]]
box_sort = sorted(box, key=lambda box_i:(box_i[2], -box_i[0], box_i[1]))
print(box_sort)
#[[8, 6, 4], [5, 9, 8], [1, 1, 8]]
このように -
をつけることで値に-1
をかけるので大きい値ほど小さくなります。これを利用して降順昇順を合わせて使用することができます。ABC128_Bの問題ではこのlambda式を使って解くと勉強になる良い例題になるかと思います。
#辞書型を操りたい
Counterなどを使って辞書型を作った後その辞書型の処理の仕方にしばらく苦戦した覚えがあるので簡単に書こうと思います。
keys()
:要素ごとのkeyだけ取り出せる。
values()
:要素ごとの値だけ取り出せる。
items()
:要素ごとのkey、値の両方を取り出せる。
この三つを使って取り出したりforで回す場合に用いられたりします。
参考文献( Pythonの辞書(dict)のforループ処理(keys, values, items) )
#最後に
最初なので丁寧な言葉遣いをしましたが次からは雑だと思います。
初めて投稿するので間違った情報やらマナーの悪いところがありましたらご連絡ください。
メモの意味もあるので雑な説明はご了承ください。
#追記
strip()の内容に対する間違いがありました、前の記述ではエラーが出ると書かれているところには実際にはエラーが出ずわざわざstrip()を使う必要性もないことが判明しました
よってそこの記述は削除いたしました
不確かな情報の発信誠に申し訳ありません