Pythonのリスト・辞書を昇順、降順に並び替えて、sort及びsortedの処理時間を計測[Alexandros]の曲の長さ順に表示

この記事を読むことによって、Pythonでリストを昇順、降順に並べ替えるsortと、新たにリストを定義して並べ替えるsortedの書き方について違いについて学べます。
また、両者の処理時間を比較することで、timeモジュールをインポートした書き方、処理時間の計算の仕方を学べます。

具体例として、好きなバンドの曲の長さの入ったリストを用います。
カラオケのオハコで、ドロスこと[Alexandros]の中でも特に私がよく歌う曲(現在コロナ禍の為、カラオケは自粛中)をリストにして、sortによる昇順、降順、sortedについてコードを書いて実行していきます。

サイトマップはこちらから

Python自作サンプル集へ
これからプログラミングを学ぶ方へ
プログラミングと資格へ
基本情報技術者試験トップへ
自己紹介

Pythonの進捗状況(私のロードマップ)

今回使用する曲のリストです。

4:08 ワタリドリ 
3:15 FamousDay
4:27 RunAway
4:46 SNOW SOUND

これをこの様なリストを作ってみました。

DROS=[‘4:27 RunAway’,’4:08 ワタリドリ’,’3:15 FamousDay’,’4:46 SNOWSOUND’]

単純なコードを書いて、このまま出力してみます。

#[Alexandros]の時間と曲名のリスト
DROS=['4:27 RunAway','4:08 ワタリドリ','3:15 FamousDay','4:46 SNOWSOUND']

print('そのまま出力-->>>>>')
print(DROS)

では、出力結果です。


では、このリストを昇順にします。
カラオケの残り時間があまり無い時には短い曲から歌うことに使えそうですね。

昇順にするにはこの様に書きます。

DROS.sort()

ここまでのコードです。

#[Alexandros]の時間と曲名のリスト
DROS=['4:27 RunAway','4:08 ワタリドリ','3:15 FamousDay','4:46 SNOWSOUND']

print('そのまま出力-->>>>>')
print(DROS)

#【昇順】にする処理
DROS.sort()
print('【昇順】に出力-->>>>>')
print(DROS)

辞書を昇順にした実行結果です。

では、降順の出力は、この様に書きます。

DROS.sort(reverse=True)

reverseはデフォルトでは、Falseになっています。
これをTrueにすることによって、リストを降順にしています。

ここまでのコードです。

#[Alexandros]の時間と曲名のリスト
DROS=['4:27 RunAway','4:08 ワタリドリ','3:15 FamousDay','4:46 SNOWSOUND']

print('そのまま出力-->>>>>')
print(DROS)

#【昇順】にする処理
DROS.sort()
print('【昇順】に出力-->>>>>')
print(DROS)

#【降順】にする処理
DROS.sort(reverse=True)
print('【降順】に出力-->>>>>')
print(DROS)

リストを降順にした出力結果です。

これで、この記事を終わりにしても良いのですが、このリスト時間と曲があるので、一層のこと辞書にした方が良いのでは、と思われますよね。
そこで、辞書に作り替えてみます。

この様な辞書を作りました。

dict_DROS={‘4:27′:’RunAway’,’4:08′:’ ワタリドリ’,’3:15′:’FamousDay’,’4:46′:’SNOWSOUND’}

これまでのコードと出力結果です。

#[Alexandros]の時間と曲名のリスト
DROS=['4:27 RunAway','4:08 ワタリドリ','3:15 FamousDay','4:46 SNOWSOUND']

print('そのまま出力-->>>>>')
print(DROS)

#【昇順】にする処理
DROS.sort()
print('【昇順】に出力-->>>>>')
print(DROS)

#【降順】にする処理
DROS.sort(reverse=True)
print('【降順】に出力-->>>>>')
print(DROS)

#辞書を定義
dict_DROS={'4:27':'RunAway','4:08':' ワタリドリ','3:15':'FamousDay','4:46':'SNOWSOUND'}
#辞書をそのまま出力する処理
print('【辞書】を【そのまま】出力-->>>>>')
print(dict_DROS)

辞書をそのまま出力した結果です。

では、同様に辞書を昇順にしてみます。

この書き方はエラーになる
dict_DROS.sort()

このエラー分をざっくりとした日本語に訳すと、「辞書ではsortは使えないよ!!」
という意味です。

つまり、sortはリストでは使えるけれど、辞書では使えないんですよね。

そこで、sortedを使って、items()を加えます。キーと値の両方をタプルとして出力するのに、items()も使って、この様にコードを書き直します。

new_dict_DROS=sorted(dict_DROS.items())

簡単に書くと、並び替えた辞書を新しい辞書に代入して、その新しい辞書を出力しています。

#[Alexandros]の時間と曲名のリスト
DROS=['4:27 RunAway','4:08 ワタリドリ','3:15 FamousDay','4:46 SNOWSOUND']

print('そのまま出力-->>>>>')
print(DROS)

#【昇順】にする処理
DROS.sort()
print('【昇順】に出力-->>>>>')
print(DROS)

#【降順】にする処理
DROS.sort(reverse=True)
print('【降順】に出力-->>>>>')
print(DROS)

#辞書を定義
dict_DROS={'4:27':'RunAway','4:08':' ワタリドリ','3:15':'FamousDay','4:46':'SNOWSOUND'}

#辞書をそのまま出力する処理
print('【辞書】を【そのまま】出力-->>>>>')
print(dict_DROS)

#辞書を昇順にする処理
new_dict_DROS=sorted(dict_DROS.items())
print('【辞書を昇順】に出力-->>>>>')
print(new_dict_DROS)

辞書を昇順にする処理の結果です。


今度は辞書を降順にしてみます。この様にコードを追記します。
こちらもreverseをTrueにします。

new_dict_DROS=sorted(dict_DROS.items(),reverse=True)

#[Alexandros]の時間と曲名のリスト
DROS=['4:27 RunAway','4:08 ワタリドリ','3:15 FamousDay','4:46 SNOWSOUND']

print('そのまま出力-->>>>>')
print(DROS)

#【昇順】にする処理
DROS.sort()
print('【昇順】に出力-->>>>>')
print(DROS)

#【降順】にする処理
DROS.sort(reverse=True)
print('【降順】に出力-->>>>>')
print(DROS)

#辞書を定義
dict_DROS={'4:27':'RunAway','4:08':' ワタリドリ','3:15':'FamousDay','4:46':'SNOWSOUND'}

#辞書をそのまま出力する処理
print('【辞書】を【そのまま】出力-->>>>>')
print(dict_DROS)

#辞書を昇順にする処理
new_dict_DROS=sorted(dict_DROS.items())
print('【辞書を昇順】に出力-->>>>>')
print(new_dict_DROS)

#辞書を降順にする処理
new_dict_DROS=sorted(dict_DROS.items(),reverse=True)
print('【辞書を降順】に出力-->>>>>')
print(new_dict_DROS)

辞書を降順にする出力結果です。

sortedはリストでも辞書でも使えるんなら、sortっていらなくね?
って思いましたので、なぜsortが存在するのか処理時間の観点から見てみます。

一旦分かりやすくする為に、リストの定義と昇順のコードのみを掲載します。

#[Alexandros]の時間と曲名のリスト
DROS=['4:27 RunAway','4:08 ワタリドリ','3:15 FamousDay','4:46 SNOWSOUND']

#【昇順】にする処理
DROS.sort()
print('【昇順】に出力-->>>>>')
print(DROS)


このコードに追記して、sortを使った場合とsortedを使った場合の処理時間の違いを求めます。

timeモジュールをインポートして、sortの処理の直前にこの様に書くと処理開始前の時刻が求められます。

startTime1=time.time()

このコードで処理開始前の時刻が求められます。
この時刻とは、1970年1月1日0時0分0秒からの経過秒数です。

その為、処理の直後にはにendTime1を同様に記述して、下記の様にstartTime1とendTime1の差を求めることによって、処理にかかる時間を求めることが出来ます。

Time1=endTime1-startTime1


sortedの場合は、startTime2とendTime2の差を同様にしてを求めます。
また、どっちの方がどれだけ時間が短かったのかをIF文での分岐で比較を使って求めたので、ちょっとコードが長くなりました。

#時間を計測する為、にtimeモジュールをインポート
import time

#[Alexandros]の時間と曲名のリスト
DROS=['4:27 RunAway','4:08 ワタリドリ','3:15 FamousDay','4:46 SNOWSOUND']

#【sort】を使って昇順にするのにかかる時間を求める
#処理の開始
startTime1=time.time()

#【昇順】にする処理
DROS.sort()

#処理の終了
endTime1=time.time()

#【sort】の処理時間
Time1=endTime1-startTime1

#処理時間の出力
print('【sort】を使ってリストを昇順にした時の処理時間')
print(Time1)



#【sorted】を使って昇順にするのにかかる時間を求める
#処理の開始
startTime2=time.time()

#【昇順】にする処理
newList=sorted(DROS)

#処理の終了
endTime2=time.time()

#【sorted】の処理時間
Time2=endTime2-startTime2

#処理時間の出力
print('【sorted】を使ってリストを昇順にした時の処理時間')
print(Time2)

#【sort】と【sorted】の処理時間でどちらの方が時間がかかるか比較する
#sortの方が早い場合
if Time1<Time2:
    print('【sort】の方が'+str(Time2-Time1)+'処理が早い\n')
#sortedの方が早い場合
else:
    print('【sorted】の方が'+str(Time1-Time2)+'処理が早い\n')


では、測定結果です。

これだけ見ると、sortの方が処理速度的にお得に思えます。
しかし、何回かやっていると時間が変わるので、その画面も表示します。

【sorted】の方が早いこともある。
こうなると、リストの並べ替えでsortedではなく、sortを使うメリットは処理速度以外に何かあるのか考えてみました。

リストをループで表示してみます。

#[Alexandros]の時間と曲名のリスト
DROS=['4:27 RunAway','4:08 ワタリドリ','3:15 FamousDay','4:46 SNOWSOUND']

#ループでそのまま改行表示
print('リストをループで【そのまま】表示')
for music in DROS:
    print(music)

これを【sort】と【sorted】でループ表示してみます。

#[Alexandros]の時間と曲名のリスト
DROS=['4:27 RunAway','4:08 ワタリドリ','3:15 FamousDay','4:46 SNOWSOUND']

#ループでそのまま改行表示
print('リストをループで【そのまま】表示')
for music in DROS:
    print(music)

print()

#sortを使ってループで表示
print('リストをループで【sort】で表示')
DROS.sort()
for music in DROS:
    print(music)

print()

#sortedを使ってループで表示
print('リストをループで【sorted】で表示')
DROS=sorted(DROS)
for music in DROS:
    print(music)

なので、結局、リストの場合sortを使うメリットというものがこの記事の実験からは明確にはなりませんでした。

まとめるとsortとsortedの違いはsortはリストのみ、sortedはリストだけではなく辞書も使えます。
sortとsortedの処理時間を検証したところ、若干sortの方が私の環境では早いようです。

ドロスこと[Alexandros]の車のCMソング「風になって」が話題ですね。
私もこの曲大好きで、コロナが終息したらカラオケに行って歌いたいです。

当分は自粛、自粛、自粛ですが。

ベストアルバム『Where’s My History?』も発売されますね。
楽しみです。
iTunesで買おうかな(=^・^=)mm。。。

では、そのまま出力、ループで出力、時間の昇順に出力、時間の降順に出力でプログラミングして見ます。

最後までお読みいただき、ありがとうございます。

■ 参考文献の紹介 ■
じっくり丁寧にPythonを学びたい方向けの書籍を紹介します。

Pythonを基礎から中級程度まで丁寧に学びたい方におすすめの書籍です。
まずはpaizaラーニングなどの学習コンテンツで1〜2巡(苦手な所は納得がいくまで何巡でも)してからこの本で学ぶと、自分の学習状況をブログなどでアウトプット出来るようになり、また、エラーなどの不明点を調べられる力もついていきます。

サイトマップはこちらから

Python自作サンプル集へ
これからプログラミングを学ぶ方へ
プログラミングと資格へ
基本情報技術者試験トップへ
自己紹介

Pythonの進捗状況(私のロードマップ)

Python辞書をループで3Bの恋人を表示

この記事を読むと、Pythonの辞書のキー及び値とは何か、また辞書自体の表示と、ループを使ってキーと値の表示をすることが可能になります。

辞書の例として、ライン漫画で人気でドラマ化された「3Bの恋人」の職業をキーに、キャラクターを値にしています。

辞書は{“キー”:”値”,”キー”:”値”・・・}の構造になっていて、3Bの恋人を例にすると、{“トリマー”:”はる”,”バンドマン”:”ユウ”}などになっています。

では、この記事本編で詳細を見ていきます。

サイトマップはこちらから

Python自作サンプル集に戻る
メインメニューに戻る
これからプログラミングを始める方へ
基本情報技術者試験へ
自己紹介

Pythonの進捗状況(私のロードマップ)

おはこんばんにちは!
うにゃうにゃエンジニアの猫です(=^・^=)

話題のドラマ、「3Bの恋人」の3Bとは、主演の馬場ふみかさんのBでは無く、
バンドマン、美容師、バーテンダーの職業に付くBです。

その3Bに主人公のはると4B目の舞台役者を加えて、5人の職業と名前を辞書を使ってループで取り出して見ます。
まず、print関数でシンプルに辞書自体を表示させてみます。

コードはこちらです。

#辞書を作成
character={"トリマー":"はる","バンドマン":"ユウ","美容師":"慎太郎","バーテンダー":"ヨシ","舞台役者":"マコト"}

#辞書自体を出力
print(character)

ちょっと見辛いですが・・・実行結果です。

では、この辞書をループを使って出力してみます。

コードに下記を追加します。
キーとなるのはjobは職業で、値となるのはhumanとして、forループで(job,human)とすると、「トリマー,はる」から、「舞台役者,マコト」までの全てのメンバーを取り出せます。

辞書.items():

を使って、キーであるjobと、値であるhumanを取り出します。

#辞書をループで出力
for (job,human) in character.items():
    print(job,human)

実行結果です。

まぁ、これでも辞書のキーと値が表示されていますけれど、もう少し日本語の体裁を整えたいと思います。

下記のように日本語を整えて表示します。

print(job+”の、”+human+”さんです。”)

ここまでのコードです。

#辞書を作成
character={"トリマー":"はる","バンドマン":"ユウ","美容師":"慎太郎","バーテンダー":"ヨシ","舞台役者":"マコト"}

#辞書自体を出力
print(character)

#改行
print()

#辞書をループで出力
for (job,human) in character.items():
    print(job+"の、"+human+"さんです。")

#改行
print()

実行結果です。

もう少し見やすくすると・・・
コードをこの様に書き換えます。

print(“【”+job+”】の、【”+human+”】さんです。”)

これで、実行してみます。

ここまでのコードです。

#辞書を作成
character={"トリマー":"はる","バンドマン":"ユウ","美容師":"慎太郎","バーテンダー":"ヨシ","舞台役者":"マコト"}

#辞書自体を出力
print(character)

#改行
print()

#辞書をループで出力
for (job,human) in character.items():
    print("【"+job+"】の、【"+human+"】さんです。")

#改行
print()

これで実行してみます。

改行のprint()、もう少しスッキリさせたいですよね。
なので、もうちょっと改変します。

#辞書自体を出力
print('\n'+str(character)+'\n')

この様にstrと’\n’で改行を表示させました。

では、最終的なプログラムを表示します。

#辞書を作成
character={"トリマー":"はる","バンドマン":"ユウ","美容師":"慎太郎","バーテンダー":"ヨシ","舞台役者":"マコト"}

#辞書自体を出力
print('\n'+str(character)+'\n')


#辞書をループで出力
for (job,human) in character.items():
    print("【"+job+"】の、【"+human+"】さんです。")

最後までお読みいただきありがとうございました。

サイトマップはこちらから

Python自作サンプル集に戻る
メインメニューに戻る
これからプログラミングを始める方へ
基本情報技術者試験へ
自己紹介

Pythonの進捗状況(私のロードマップ)

馬場ふみかさんの写真集 ■

同じ人類で、ここまで美しい女性がいるのかと、感動しました!!
最強の被写体であり、たっぷりと曲線美が堪能できます。
「スタイル抜群」とか「ナイスボディ」などといった言葉ではとても収まりきらない程の美しさで、まさに神の造形です。
女性の方で、ファッションに興味のある方でしたら服(水着も含め)の着こなし方や見せ方、角度、ポーズ、表情など凄く勉強になりますので、男女ともに楽しめる写真集です。「好きな男性を振り向かせたい」という女性の方にとって、女性としてのお手本になる写真集だと思います。
私は、資格試験やプログラミング学習のリフレッシュに、馬場ふみかさんの写真集を見て、目の保養にしています。参考書と共に、馬場ふみかさんの写真集を勉強のお供にしていて、楽しく勉強が出来たお陰で、実際にIT系国家資格の基本情報技術者試験(以下FE)に高得点一発合格(点数)出来ました。
20年以上前の平成初期ぐらいに(大学生〜新社会人の頃)情報二種や初級シスアドに2度も落ちてしまった私でさえFEに1発合格が出来たのは、精神的な面で、馬場ふみかさんの写真集やドラマやCM、SNSなどの芸能活動が支えになったからです。
私にとって馬場ふみかさんは、まさに勝利の女神様です!!

■ 参考文献の紹介 ■
じっくり丁寧にPythonを学びたい方向けの書籍を紹介します。

Pythonを基礎から中級程度まで丁寧に学びたい方におすすめの書籍です。
まずはpaizaラーニングなどの学習コンテンツで1〜2巡(苦手な所は納得がいくまで何巡でも)してからこの本で学ぶと、自分の学習状況をブログなどでアウトプット出来るようになり、また、エラーなどの不明点を調べられる力もついていきます。

サイトマップはこちらから

Pythonで辞書を使ってコードブルーの職業別に出力

この記事を読むと、Pythonの辞書の基本的な作り方、キーと値の指定の仕方、次のデータの追加方法、辞書から「キーを指定」して「値を取り出す方法」が学べます。
また、Pythonでの標準入力の書き方の復習も可能です。

この記事で作成する辞書の具体例として、医療系ドラマ「コード・ブルー ドクターヘリ緊急救命 3rd season」のキャラクターを用います。(山Pこと元NEWSの山下智久さん主演のドラマです。)

サイトマップはこちらから

Python自作サンプル集へ
これからプログラミングを学ぶ方へ
プログラミングと資格へ
基本情報技術者試験トップへ
自己紹介

Pythonの進捗状況(私のロードマップ)

おはこんばんにちは!
うにゃうにゃエンジニアの猫です(=^・^=)
辞書は、キーと値で構成されているので、「{(波かっこ)」で括って、下記のように記述します。

character_dic={‘ドクター’:’藍沢耕作’}

で、この場合は【キー】が「ドクター」で、【値】が「藍沢耕作」です。
キーと値は「:」で区切っています。

この辞書にあと1人だけ(私の推しキャラ!)を追加してみます。

character_dic={‘ドクター’:’藍沢耕作’,’ナース’:’雪村双葉’}

辞書は、「,」を区切ることによって次のデータが入ります。
同様にして、他のキャラクターも追加して、辞書character_dicは、この様になりました。

character_dic={‘ドクター’:’藍沢耕作’,’フェロー’:’名取楓馬’,’ナース’:’雪村双葉’,’患者’:’緒方さん(板前の患者)’,’その他’:'(=^・^=)mm。。。’}

この辞書を単純に出力するコードと、その実行結果です。

#コードブルーのキャラクターの辞書。
#職業をキー、名前を値
character_dic={'ドクター':'藍沢耕作','フェロー':'名取楓馬','ナース':'雪村双葉','患者':'緒方さん(板前の患者)','その他':'(=^・^=)mm。。。'}

print(character_dic)

では、標準入力と単純なIF文を使って、少しアレンジをしていきたいと思います。

標準入力で、「d」と入力するとキー「ドクター」が指定されて値の「藍沢耕作」が出力されます。(ifの条件が真の時に該当)

「f」と入力するとキーに「フェロー(研修医)」が指定されて値の「名取楓馬」を出力されます。(elifの条件が「f」の時に該当)

「n」と入力するとキーに「ナース」が指定されて値の「雪村双葉」が出力されます。
(elifの条件が「n」の時に該当)

「p」と入力するとキーに「患者」が指定されて「緒方さん(板前の患者)」が出力されます。pは患者(patient)のpです。
(elifの条件が「p」の時に該当)

また、それ以外のテキトーな入力をすると、キーに「その他」が指定され、猫マークの「(=^・^=)mm。。。」が出力されます。(elseに該当)

ここまでのコートを、かいつまんで解説すると、標準入力の直前に、

print(‘【d】ドクター、【f】フェロー、【n】ナース,【p】患者 【記号】を入力>>>’,end=”)

と、書いています。
最後のend=”は、改行せずにこのメッセージの直後に【d】や【f】を入力できる様にしています。

標準入力は

job=input()

で、ここで【d】とか【f】などの文字を変数jobに格納します。

その後はIF文で分岐させています。

if job=='d':
    index='ドクター'
elif job=='f':
    index='フェロー'
elif job=='n':
    index='ナース'
elif job=='p':
    index='患者'
else:
    index='その他'

その後にjobに入力された【d】や【f】がこのIF文による分岐で、indexに「ドクター」や「フェロー」などの辞書のキーが代入されます。

その代入されたindexを辞書のキーとして、キャラクター名を下記のprint文で出力しています。

print(character_dic[index])

では、これまでのコードと実行結果です。

#コードブルーのキャラクターの辞書。
#職業をキー、名前を値
character_dic={'ドクター':'藍沢耕作','フェロー':'名取楓馬','ナース':'雪村双葉','患者':'緒方さん(板前の患者)','その他':'(=^・^=)mm。。。'}

#標準入力でキーを指定
print('【d】ドクター、【f】フェロー、【n】ナース,【p】患者 【記号】を入力>>>',end='')
job=input()

#IF文による分岐で辞書のキーを指定して、変数indexに代入する
if job=='d':
    index='ドクター'
elif job=='f':
    index='フェロー'
elif job=='n':
    index='ナース'
elif job=='p':
    index='患者'
else:
    index='その他'

#辞書のキーにindexが入って、該当する値が出力される
print(character_dic[index])

ここから実行結果を見ていきます。頭の中でIFによる分岐をイメージして書きました。

標準入力で【d】を指定した場合。

標準入力で【f】を指定した場合。

標準入力で【n】を指定した場合。

標準入力で【p】を指定した場合。

標準入力でなんかテキトーなキー(ここでは【y】)を指定した場合。

ご精読ありがとうございました。

■ 参考文献の紹介 ■
じっくり丁寧にPythonを学びたい方向けの書籍を紹介します。

Pythonを基礎から中級程度まで丁寧に学びたい方におすすめの書籍です。
まずはpaizaラーニングなどの学習コンテンツで1〜2巡(苦手な所は納得がいくまで何巡でも)してからこの本で学ぶと、自分の学習状況をブログなどでアウトプット出来るようになり、また、エラーなどの不明点を調べられる力もついていきます。

サイトマップはこちらから

Python自作サンプル集へ
これからプログラミングを学ぶ方へ
プログラミングと資格へ
基本情報技術者試験トップへ
自己紹介

Pythonの進捗状況(私のロードマップ)

モバイルバージョンを終了