ページへ戻る

− Links

 印刷 

Python​/リストをランダムに並べ替える のバックアップの現在との差分(No.1) :: NJF Wiki

xpwiki:Python/リストをランダムに並べ替える のバックアップの現在との差分(No.1)

  Next »[4]
1: 2019-03-31 (日) 17:09:32 njf[5] ソース[6] バックアップ No.1 を復元して編集[7] 現: 2019-04-03 (水) 21:50:25 njf[5] ソース[8] 編集[9]
Line 4: Line 4:
 import random  import random
 + 
 randomList = [0,1,2]  randomList = [0,1,2]
 + 
 random.shuffle(randomList)  random.shuffle(randomList)
 + 
 print(randomList)  print(randomList)
Line 21: Line 21:
*元のリストを変更せず、ランダムに並び替えられたリストを新たに得る [#m891760c] *元のリストを変更せず、ランダムに並び替えられたリストを新たに得る [#m891760c]
-random.sample()を使います。このメソッドは好きな数のランダムなサンプルをリストで返す関数です。二つ引数をとり、一つ目が元になるリスト、二つ目が返すリストの長さです。二つ目の引数を元のリストの長さと同じにすれば、もとのリストをランダムに並び替えた新たなリストを返します。+random.sample()を使います。このメソッドは好きな要素数のランダムなサンプルをリストで返す関数です。二つ引数をとり、一つ目が元になるリスト、二つ目が返すリストの長さです。二つ目の引数を元のリストの長さと同じにすれば、もとのリストをランダムに並び替えた新たなリストを返します。
 import random  import random
 + 
 randomList = [0,1,2]  randomList = [0,1,2]
 + 
 newRandomList = random.sample(randomList,len(randomList))  newRandomList = random.sample(randomList,len(randomList))
 + 
 print(newRandomList)  print(newRandomList)
Line 35: Line 35:
など。 など。
-*よくあるサンプルにはだまされないように [#x1b6384d]+*よくあるサンプルは使わないのが無難 [#x1b6384d]
「配列 ランダム 並び替え」などでインターネット検索すると次のようなコードを記載したページが上位に現れます。 「配列 ランダム 並び替え」などでインターネット検索すると次のようなコードを記載したページが上位に現れます。
     randomList = [0,1,2]      randomList = [0,1,2]
 + 
     listLen=len(randomList)      listLen=len(randomList)
 + 
     for i in range(listLen):      for i in range(listLen):
         a = randomList[i]          a = randomList[i]
Line 48: Line 48:
         randomList[j] = a          randomList[j] = a
-つまり、配列から順に要素を選び、次にランダムに配列を一つ選び、この二つを入れ替えていく物です。+つまり、配列から順に要素を選び、次にランダムに要素を一つ選び、この二つを入れ替えていく物です。
これは結果がかなりかたよります。 これは結果がかなりかたよります。
Line 63: Line 63:
となり、明らかに14800ぐらいのものと、18500ぐらいのものに二分されました。 となり、明らかに14800ぐらいのものと、18500ぐらいのものに二分されました。
-これは[[こちら:http://nmi.jp/archives/541]]の記事で指摘されているように、アルゴリズムの構造的な欠陥です。+これは[[こちらの記事:http://nmi.jp/archives/541]]で指摘されているように、アルゴリズムの構造的な欠陥です。
-たとえば3つのものの並べ替えの結果は3!=6通りですが、上のアルゴリズムでは3回3つの要素をランダムに入れ替えるので、3*3*3=27通りです。+たとえば3つのものの並べ替えの結果は3!=6通りですが、上のアルゴリズムでは3回3つの要素をランダムに入れ替えるので、並び替えの方法の数は3*3*3=27通りです。
-27は6で割り切れませんから、かならず上のアルゴリズムはそれぞれの結果に対して、どれかが多く、どれかが少ない並べ替えを行っています。(詳しくは[[上記記事:http://nmi.jp/archives/541]]にあります。)+27は6で割り切れませんから、かならず上のアルゴリズムはそれぞれの結果に対して、どれかが多く、どれかが少なく並び替え方を割り振りを行って並べ替えています。(詳しくは[[上記記事:http://nmi.jp/archives/541]]にあります。)
今は長さ3の配列ですが、配列の長さが大きくなるにつれて不均等になりやすくなることも分かっています。 今は長さ3の配列ですが、配列の長さが大きくなるにつれて不均等になりやすくなることも分かっています。
  Next »[4]