2016-04-05 4 views
-1

Tüm dizi öğelerinin yerlerini değiştirmesi için bir diziyi karıştırmam gerekiyor. Bir dizi [0,1,2,3] verildiğinde [1,0,3,2] veya [3,2,0,1] elde etmek için [3,1,2,0] yeterli olmazdı.Bir dizi nasıl karıştırılır, böylece tüm öğeler yerlerini değiştirir?

Bunu yapmak için python'da herhangi bir işlev var mı, yoksa bunu kendim mi yapmalıyım?

while not allDifferent(v): 
    random.shuffle(v) 
bu riski elbette

potansiyel olabileceğini:

+0

Olası kopyası [Bir diziyi python ile karıştır] (http://stackoverflow.com/questions/473973/shuffle-an-array-with-python) – Jeff

cevap

1

aklıma gelen en kısa çözüm tüm unsurları farklı bir konumda olana kadar karışık ve sonucu kontrol etmek random.shuffle(v) kullanmak olacaktır birçok kez denemek, ama bu çok büyük bir sorun değil. Bu konuda bazı testler yaptıktan sonra, tüm elemanların farklı bir konumda bulunmasından önceki ortalama girişim sayısı, liste uzunluğu 3 için yaklaşık 3'tür. Liste uzunluğu 5 için 2.7, ve daha uzun listeler için 2.7 civarında kalıyor gibi gözükür. 1.000).

Böyle bir olasılığa güvenmek biraz zor, ama çoğu uygulama için iyi olmalısınız.

Düzenleme: Artık daha hızlı bir şey tercih ederseniz, muhtemelen bunu kendiniz yapmak zorunda kalırsınız. Böyle bir şey: hayır sayı (çünkü i+1 arasında) daha önce olduğu gibi aynı yerde biter böylece bir dizi olarak karıştırılır O

for i in range(0, len(a)-1): 
    pick = random.randint(i+1, len(a)-1) 
    a[i], a[pick] = a[pick], a[i] 

.