ここには制御された実装があります。 ランダムに4つのインデックスを選択して切り替えます。それらの値をシャッフルし、4つの指定された場所に戻します。新しい値がすべて異なることを保証するものではありません。
import random
import copy
testlist = random.sample(range(0, 20), 10)
testlist.sort()
print testlist
n = 4
move_set = set()
while len(move_set) < n:
move_set.add(random.randrange(0, 10))
print move_set
move_list = list(move_set)
# Replace n elements
test1 = copy.copy(testlist)
migrant = [test1[_] for _ in move_set]
random.shuffle(migrant)
print migrant
test_case = []
for i in range(n):
test1[move_list[i]] = migrant[i]
print test1
出力:この実行で
[0, 3, 4, 5, 7, 8, 9, 12, 16, 17]
set([9, 3, 4, 5])
[5, 17, 8, 7]
[0, 3, 4, 17, 8, 7, 9, 12, 16, 5]
、それはすべての4つのインデックスが、リスト内の値であったことを唯一の偶然です。要素9,3,4および5はそれぞれ値17,5,7および8を有する。シャッフルは、4つのそれぞれを新しい場所に置きます。
なぜ** n ** **を移動することが重要ですか?ランダムリストを生成してコードに渡し、 'testlist.sort()'を呼び出して、その後に「正しい」値を生成するように思えます。 –
あなたはそれらを移動する必要がありますか、それを再生するには十分でしょうか? – Prune
@AustinHastings私はすでにそれをやろうと思っていますが、基本的にソートされたリスト、逆ソートされたリスト、ランダムにソートされたさまざまなリストの多くの一般的なソートアルゴリズムのランタイムを比較しています。いくつかの要素が移動されたソートされたリストは、ランタイムに関して完全にソートされたリストと比較したいものです。 – Woooooooooooooow