prosty sposób, aby to zrobić jest za pomocą następujących trzy kroki:
- tworzenie bloków (lista 2d);
- potasuj tę listę; i
- scalić te listy ponownie.
Więc:
import random
# Import data
data = [1,2,3,4,5,6]
blocksize = 2
# Create blocks
blocks = [data[i:i+blocksize] for i in range(0,len(data),blocksize)]
# shuffle the blocks
random.shuffle(blocks)
# concatenate the shuffled blocks
data[:] = [b for bs in blocks for b in bs]
Jeśli nie chcesz, aby zapisać dane z powrotem w data
, można po prostu użyć:
data = [b for bs in blocks for b in bs]
Dla tych danych uzyskałem:
>>> data
[3, 4, 1, 2, 5, 6]
drugi raz:
>>> data
[5, 6, 1, 2, 3, 4]
Przez "bloki danych" masz na myśli, że w twoim przykładzie powinien on zachować 2 pary? Jak "1, 2" powinno zawsze być razem? – Felk