Trộn các phần tử trong một danh sách bằng Python

Kinh doanh

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.

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.

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]
Copied title and URL