python-文字列再配置:固定seed()でrandomを利用する.shuffle()簡略化コード


目次:
目的:random.seed()は,コードによってその機能を探究し検証する.
趣味思考:例えばrandom.seed(43)の場合
探究:固定seedの下で任意の数(>1)要素を含むリストに対して任意の深さのshuffleソートテストを行う:
目的:random.seed()は,コードによってその機能を探究し検証する.
背景:random()は擬似ランダムであり、実際には初期値seedに基づいて決定式によって計算される.
seedが固定されると、特定のデータに対する処理は同じ結果を生じる.
固定seed下randomを探究する.shuffle()が文字列リストのソートに与える影響:
趣味思考:例えばrandom.seed(43)の場合
3要素リストにrandomを使用する.shuffle,結果:[a,b,c]→[c,b,a]
you are superman→superman are you(list.reverse()と同じ効果)
4要素リストにrandomを使用する.shuffle,結果:[a,b,c,d]→[c,d,b,a]
I am the king → the king I am
import random

sentence = input().split()

random.seed(43)
random.shuffle(sentence)

print(' '.join(sentence))

探究:固定seedの下で任意の数(>1)要素を含むリストに対して任意の深さのshuffleソートテストを行う:
seedの値1-9を例にとると(実際には任意の値にすることができます):
import random
import numpy as np

size = int(input("size:"))
depth = int(input("depth:"))

for i in range(1, 10):  #            
    ls = []
    for j in range(depth):
        seq = [chr(p) for p in range(97, 97 + size)]
        random.seed(i)
        random.shuffle(seq)
        sentence = '_'.join(seq)
        ls.append(sentence)
        # print(j,sentence)
    b, s = np.unique(ls, return_counts=True)
    # c = [rv for r in zip(b, s) for rv in r]
    print('seed:{} clear in {} repeated {} times'.format(i, b, s))

exit(0)

例:
input: size: 4   depth: 100
output:
seed:1 clear in ['d_a_c_b'] repeated [100] times seed:2 clear in ['b_c_d_a'] repeated [100] times seed:3 clear in ['d_a_c_b'] repeated [100] times seed:4 clear in ['c_a_d_b'] repeated [100] times seed:5 clear in ['a_b_d_c'] repeated [100] times seed:6 clear in ['d_c_b_a'] repeated [100] times seed:7 clear in ['d_b_a_c'] repeated [100] times seed:8 clear in ['a_c_d_b'] repeated [100] times seed:9 clear in ['a_b_c_d'] repeated [100] times
適用:文字列リストを特定の順序で再編成する場合:
以上のコードを使用して、seed下のshuffle結果を固定しようとします.
(運が良ければ)特定のソートへの迅速な応用を実現し,一部の論理ソートコードの作成を省くことができる.