Một cách đơn giản để làm điều này là sử dụng sau ba bước:
- tạo khối (danh sách 2d);
- trộn danh sách đó; và
- hợp nhất lại các danh sách này.
Vì vậy:
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]
Nếu bạn không muốn để lưu trữ các dữ liệu trở lại trong data
, bạn có thể chỉ cần sử dụng:
data = [b for bs in blocks for b in bs]
Đối với dữ liệu này tôi thu được:
>>> data
[3, 4, 1, 2, 5, 6]
lần thứ hai:
>>> data
[5, 6, 1, 2, 3, 4]
Nguồn
2017-09-27 12:35:30
Bởi "khối dữ liệu", bạn có nghĩa là nó nên giữ lại 2 cặp trong ví dụ của bạn không? Giống như '1, 2' nên luôn ở bên nhau? – Felk