Nếu bạn muốn xáo trộn (sắp xếp ngẫu nhiên) các phần tử của danh sách (mảng) bằng Python, hãy sử dụng mô-đun ngẫu nhiên của thư viện chuẩn.
Có hai hàm: shuffle (), sắp xếp ngẫu nhiên danh sách ban đầu và sample (), trả về một danh sách được sắp xếp ngẫu nhiên mới. sample () có thể được sử dụng cho chuỗi và bộ giá trị.
- Xáo trộn danh sách ban đầu:
random.shuffle()
- Tạo một danh sách xáo trộn mới.:
random.sample()
- Trộn các chuỗi và bộ giá trị
- Sửa hạt giống số ngẫu nhiên
Nếu bạn muốn sắp xếp theo thứ tự tăng dần hoặc giảm dần thay vì ngẫu nhiên, hoặc theo thứ tự ngược lại, hãy xem bài viết sau.
- Những bài viết liên quan:Sắp xếp danh sách bằng Python: sự khác biệt giữa đã sắp xếp và đã sắp xếp
Xáo trộn danh sách ban đầu:random.shuffle()
Hàm shuffle () trong mô-đun ngẫu nhiên có thể sắp xếp ngẫu nhiên danh sách ban đầu.
import random
l = list(range(5))
print(l)
# [0, 1, 2, 3, 4]
random.shuffle(l)
print(l)
# [1, 0, 4, 3, 2]
Tạo một danh sách xáo trộn mới.:random.sample()
Mẫu hàm () trong mô-đun ngẫu nhiên có thể được sử dụng để tạo một danh sách mới được sắp xếp ngẫu nhiên mà không làm thay đổi danh sách ban đầu.
sample () là một hàm chọn và lấy ngẫu nhiên một phần tử từ danh sách. Đối số đầu tiên là danh sách và đối số thứ hai là số phần tử được truy xuất. Xem chi tiết bài viết sau.
- Những bài viết liên quan:Chọn ngẫu nhiên các phần tử từ danh sách bằng Python:
choice()
,sample()
,choices()
Nếu số phần tử được chọn bởi sample () là tổng số phần tử trong danh sách, chúng ta sẽ có một danh sách mới với tất cả các phần tử được sắp xếp ngẫu nhiên. Tổng số phần tử trong danh sách thu được bằng len ().
Đối tượng ban đầu sẽ không bị thay đổi.
l = list(range(5))
print(l)
# [0, 1, 2, 3, 4]
lr = random.sample(l, len(l))
print(lr)
# [0, 3, 1, 4, 2]
print(l)
# [0, 1, 2, 3, 4]
Trộn các chuỗi và bộ giá trị
Chuỗi và bộ giá trị là bất biến, vì vậy nếu bạn sử dụng random.shuffle () để thay đổi đối tượng ban đầu, bạn sẽ gặp lỗi sau.TypeError
s = 'abcde'
# random.shuffle(s)
# TypeError: 'str' object does not support item assignment
t = tuple(range(5))
print(t)
# (0, 1, 2, 3, 4)
# random.shuffle(t)
# TypeError: 'tuple' object does not support item assignment
Nếu bạn muốn xáo trộn một chuỗi hoặc bộ, hãy sử dụng random.sample () để tạo một đối tượng mới.
Ngay cả khi một chuỗi hoặc tuple được chỉ định làm đối số, random.sample () trả về một danh sách, vì vậy cần phải xử lý nó trở lại chuỗi hoặc tuple.
Trong trường hợp là một chuỗi, nó sẽ là một danh sách các ký tự lần lượt. Để nối chúng lại thành một chuỗi, hãy sử dụng phương thức join ().
sr = ''.join(random.sample(s, len(s)))
print(sr)
# bedca
Đối với các bộ giá trị, hãy sử dụng tuple (), tạo một bộ giá trị từ một danh sách.
tr = tuple(random.sample(t, len(l)))
print(tr)
# (0, 1, 2, 4, 3)
Sửa hạt giống số ngẫu nhiên
Bằng cách cung cấp một số nguyên tùy ý cho hạt giống hàm của mô-đun ngẫu nhiên (), hạt giống số ngẫu nhiên có thể được cố định và trình tạo số ngẫu nhiên có thể được khởi tạo.
Sau khi khởi tạo với cùng một hạt giống, nó luôn được sắp xếp lại theo cùng một cách.
l = list(range(5))
random.seed(0)
random.shuffle(l)
print(l)
# [2, 1, 0, 4, 3]
l = list(range(5))
random.seed(0)
random.shuffle(l)
print(l)
# [2, 1, 0, 4, 3]