はじめに
今回も「Python基礎」です。僕自身の知識があやふやな部分を扱って、整理していきます。今回はリストの並び替えです。sort()だっけ?sorted()だっけ?元のリストは書き換わるのか?書き換わらないのか?とごっちゃになることはありませんか?これらは簡単に確かめられるので、無理に覚える必要はないと思いますが、簡単に見分けられる方法をお伝えします。
リストの並び替え
リストを並び替える方法には、大きくわけて2通りあります。Python標準に用意されているsorted()関数を利用する方法と、リストのメソッドとして用意されているsort()メソッドを利用する方法です。
testlist=[3,2,6,5,2,8,2]
というリストを用いてそれぞれをみていきましょう。
sorted()関数
まずはsorted()関数です。sorted()関数は、シーケンスを引数に取ってソートした結果を返す関数です。
sorted(testlist)
とすると、次のような結果が返ってきます。
リストの要素が昇順に並び替えされてますね。このとき、元のtestlistはどうなっているでしょうか?
testlist
このようにsorted()では元のリストは変更ありません。また、昇順ではなく、降順に並び替えたいときには、次のように引数reverseでTrueを指定します。
sorted(testlist,reverse=True)
sort()関数
次に扱うのはsort()メソッドです。これはリスト型で使える関数と考えればよいでしょう。
testlist.sort()
上のコードを書いて実行すると、何も返ってきません。このとき、testlistがどうなっているかみてみましょう。
testlist
要素の昇順に並び替わっています。このようにsort()では元のリストが並び替わります。また、昇順ではなく、降順に並び替えたいときには、sorted()の時と同じように引数reverseでTrueを指定します。
testlist.sort(reverse=True)
testlist
問題
では、さっそく問題を解いてみましょう。
testlist=[3,2,6,5,2,8,2]
というリストがあるときに、このリストから3つの要素を取りだして和をとったきの最大値と最小値を求めて、次のように表示してください。
3つの要素を取り出したときの最大値は〇で、最小値は〇です。
解答
testlist.sort()
min_sum=sum(testlist[0:3])
testlist.sort(reverse=True)
max_sum=sum(testlist[0:3])
answer='3つの要素を取り出したときの最小値は%dで、最大値は%dです。'%(min_sum,max_sum)
print(answer)
前回の%演算子を利用すればすぐに解けますね。sorted()、sort()のどちらを用いても構いませんが、元のリストが書き換わるのかどうかに注意をしなければいけません。ここでは元のデータが書き換わるsort()メソッドを利用しました。min_sumには、小さい順に並べて先頭から3つの要素を足し合わせた数、max_sumには、大きい順に並べて先頭から3つの要素を足し合わせた数を格納しています。これを%演算子を用いて表示用の文字列に加工しています。
まとめ
今回はリストの並び替えと、前回扱った%演算子を用いて問題を解くことにチャレンジしてみました。sorted()やsort()のように元のリストが変わる場合と、変わらない場合があります。これはよくどっちがどっちかわからなくなってしまうのですが、簡単に見分ける方法があります。
– sorted(testlist)としたときのように、ソートされたリストが返ってくる場合は、元のリストに変更はない
– 一方、testlist.sort()のように、実行後に何も帰ってこない場合は、元のリストが変更されている
完全に覚えておかなくてもちょっと試せば確認できるので便利です。参考になれば幸いです。
コメント