【Python】リストの要素の並び替えをランダムにしたり規則性のある並び替えにする方法

Pythonのリストの要素の並び替えに際して、ランダムに並び替えをしたり、何か規則性のある任意の順番で並び替えを行いたい時に使えるソートの方法を紹介します。

最終的に、曜日、日毎、24時間毎に並びを替える独自のアルゴリズムのコードを紹介します。

例題

例えば、下の例題のように4つの選択式の中から問題を出題するようなとき。

仮にwebで反復して問題を解いて記憶力を高めていく場合、この並びが毎回同じだと並びの規則性から覚えてしまう可能性がなきにしもあらずです。(ちなみに回答はDjango)

やりたいことの定義

やりたいこととしては、並びを以下の状況に合わせて独自のアルゴリズムのコードを書いて表示を変えたい事にあります。

  • 曜日によって違う
  • 日によって違う
  • 24時間のうち時間によって違う

色々な並び替え

規則性のある並び替え

まずはおさらいとまではいきませんが、一般的な規則性のある並びを行いたい時に書くコードです。

choices = ['React', 'Django', 'Laravel', 'Ruby on Rails']

choices.reverse()
print(choices) # ['Ruby on Rails', 'Laravel', 'Django', 'React']

この場合だと、React→Ruby on Railsといった並びが、逆順になりました。

ランダムな並び替え

ランダムに並び替えたい時は以下のモジュールを使用することが多いです。

import random

choices = ['React', 'Django', 'Laravel', 'Ruby on Rails']

random.shuffle(choices)
print(choices)

上記コードで出力した場合、毎回違う結果が返されるのがわかります。

状況に応じた規則性のある並び替え

ここからが本題ですが、先に説明した日や曜日によって並びが違う表示を行いたい時を想定したコードを紹介します。

今回は、1ヶ月の中で日毎に出題される並びが違うアルゴリズムのコードを書いてみたので紹介します。

import datetime
import itertools

choices = ['React', 'Django', 'Laravel', 'Ruby on Rails']

# 全ての組み合わせの総数を出力。4*3*2=24通り
all_combinations_counts = len(list(itertools.permutations(choices)))

all_combinations = []
# 全ての問題の組み合わせを作成してall_combinationsに保存する
for choice in itertools.permutations(choices, len(choices)):
    all_combinations.append(choice)

# 一応逆順にしておく
all_combinations.reverse()

# 本日の日付取得
dt_now = datetime.datetime.now()
dt_now_day = dt_now.day

# 本日の日付けから全く見合わせの総数を割った余りを求める
choice_num = dt_now_day % all_combinations_counts

# choice_numが本日の問題の並びとなる
result = all_combinations[choice_num]
print(result)

それぞれコードが何をしているかに関しては、コード内のコメントアウトに書きました。

18-19行目を操作して、曜日や時間毎に変えてもいいのかもしれません。

最後に

いかがでしたでしょうか。

以上が、「【Python】リストの要素の並び替えをランダムにしたり規則性のある並び替えにする方法」の紹介記事になります。

自分で色々とアレンジを加えてみてください。

プログラミング学習を効率良く進めるには…

私ヒロヤンがプログラミングを始めた頃は以下のような感じでした。

何から手をつけていいのか、わからない。

プログラミングを始めてみたけど、エラーが解決できない。

そしてネットで調べていくうちに膨大な時間が過ぎていきました。

私ヒロヤンの実体験より、プログラミングを効率的に学ぶために大切なことは以下のことだと考えています。

1. いつまでもダラダラとやらないで、目標を決定して短期集中する

2. マンツーマンで、わからない箇所は直ぐに質問をして即レスをもらう

.proでは私ヒロヤンが学習してきたプログラミング経験0からのpython/django、その他webサイト・サービス開発のコースが用意されています。

カウンセリング自体は無料なので話を聞いてみるだけでもいかがでしょうか?

また以下のリンク先ではPythonを教えてくれるスクールをまとめ紹介しています。

コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です