Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Python Shuffle List: Hướng Dẫn Bước Đi Bước

Phương thức random.shuffle() trong Python thay đổi thứ tự các mục trong danh sách một cách ngẫu nhiên. Kết hợp với chỉ mục (indexing), phương thức này hữu ích để chọn mục ngẫu nhiên từ danh sách. Phương thức random.shuffle() nhận một tham số: danh sách bạn muốn thay đổi.


Bạn có thể gặp tình huống muốn ngẫu nhiên hóa thứ tự các mục trong danh sách. Ví dụ, bạn tạo chương trình chọn người thắng cuộc sổ số (raffle) tại cửa hàng. Bạn muốn chương trình chọn người thắng bằng cách tổ chức lại ngẫu nhiên danh sách người tham gia.

Đó là lúc phương thức random.shuffle() phát huy tác dụng. Phương thức random.shuffle() là một phần của module random trong Python, dùng để sắp xếp lại thứ tự các mục trong danh sách một cách ngẫu nhiên. Trong hướng dẫn này, chúng ta sẽ thảo luận cách dùng phương thức random.shuffle().

Xáo Trộn Danh Sách Trong Python

Hàm random.shuffle() trong Python sắp xếp ngẫu nhiên các mục trong danh sách. Phương thức này hữu ích cho ứng dụng cần lấy mục ngẫu nhiên từ danh sách. random.shuffle() sửa đổi danh sách gốc. Phương thức này không tạo danh sách mới.

List (danh sách) lưu trữ tập hợp dữ liệu. Danh sách Python được sắp xếp (ordered), nghĩa là khi bạn lưu mục vào danh sách, nó sẽ ở nguyên vị trí đó. Mặc dù đây là tính năng quan trọng của danh sách, bạn có thể tạo chương trình cần xáo trộn thứ tự danh sách.

random.shuffle() là một phần của thư viện random, thực hiện các bộ sinh số ngẫu nhiên giả (pseudo-random number generators) trong Python. Nghĩa là trước khi dùng random.shuffle(), cần import thư viện random vào code. Làm bằng cách thêm dòng sau:

import random

Cú pháp phương thức random.shuffle():

import random
random.shuffle(list_name, function)

Phương thức random.shuffle() nhận hai tham số:

  • list_name: list, tuple, hoặc string mà bạn muốn xáo trộn thứ tự (bắt buộc).
  • function: tên hàm trả về số float ngẫu nhiên giữa 0.0 và 1.0, hoặc float khác trong khoảng đó (tùy chọn).

Việc dùng tham số function với random.shuffle() không phổ biến. Chỉ dùng khi bạn muốn thuật toán xáo trộn tùy chỉnh cân nặng giá trị khác nhau. Do đó, hướng dẫn này không bao gồm tham số function của random.shuffle().

Bạn có thể dùng random.shuffle() trên string hoặc tuple. Trong mọi trường hợp, random.shuffle() sửa đổi dữ liệu gốc. Nó không tạo giá trị mới, như string mới hay tuple mới.

Ví Dụ random.shuffle() Trong Python

Giả sử chúng ta tổ chức sổ số tại cửa hàng. Người thắng nhất nhận thẻ quà tặng $100 mua bất kỳ sản phẩm nào. Người nhì nhận $50, người ba nhận $25.

Chúng ta có danh sách tên tất cả người tham gia sổ số. Mục tiêu: tổ chức lại danh sách theo thứ tự ngẫu nhiên để xác định người thắng. Sẽ dùng phương thức random.shuffle().

Code tổ chức lại thứ tự danh sách ngẫu nhiên để xác định người thắng:

import random
raffle_entrants = ['Thomas Crane', 'Braden Cox', 'Adie Paulson', 'Leonardo Downs', 'Lindsay Knapp', 'Carl Sanderson']
print('Entrants (ordered)')
print(raffle_entrants)
print('Winners (random order)')
random.shuffle(raffle_entrants)
print(raffle_entrants)

Hàm trả về kết quả sau:

Entrants (ordered)
['Thomas Crane', 'Braden Cox', 'Adie Paulson', 'Leonardo Downs', 'Lindsay Knapp', 'Carl Sanderson']
Winners (random order)
['Adie Paulson', 'Braden Cox', 'Carl Sanderson', 'Leonardo Downs', 'Thomas Crane', 'Lindsay Knapp']

Dòng đầu, import thư viện random bằng câu lệnh import Python. Thư viện này chứa phương thức random.shuffle() dùng sau trong code. Tiếp theo, khai báo biến raffle_entrants chứa tên tất cả người tham gia sổ số.

Hai dòng sau, in thông báo Entrants (ordered) ra console, theo sau nội dung danh sách raffle_entrants. Điều này cho thấy danh sách trước khi xáo trộn.

In thông báo Winners (random order). Code dùng random.shuffle() xáo trộn nội dung danh sách raffle_entrants. Cuối cùng, in danh sách raffle_entrants sau khi xáo trộn.

Bây giờ có danh sách tên được xáo trộn ngẫu nhiên. Theo ví dụ trên, bây giờ biết Braden Cox thắng nhất. Thomas Crane thắng nhì và Leonardo Downs thắng ba.

Xác Thực Code Của Chúng Ta

Nếu chạy code lần nữa, ta được danh sách Python sắp xếp mới. Xem gì xảy ra khi thực thi code lần thứ hai:

Entrants (ordered)
['Thomas Crane', 'Braden Cox', 'Adie Paulson', 'Leonardo Downs', 'Lindsay Knapp', 'Carl Sanderson']
Winners (random order)
['Braden Cox', 'Lindsay Knapp', 'Carl Sanderson', 'Leonardo Downs', 'Thomas Crane', 'Adie Paulson']

Vậy rõ ràng random.shuffle() sẽ trả về danh sách được tổ chức ngẫu nhiên (thực tế là giả ngẫu nhiên - pseudo-randomly) mỗi lần dùng.

Kết Luận

Bạn có thể ngẫu nhiên hóa thứ tự các mục trong danh sách Python bằng phương thức random.shuffle(). Trong ví dụ, random.shuffle() giúp tạo chương trình chọn ngẫu nhiên người thắng sổ số từ danh sách người tham gia.

Muốn tìm hiểu thêm về lập trình Python? Đọc hướng dẫn How to Learn Python của chúng tôi. Trong hướng dẫn này, bạn sẽ tìm thấy mẹo hàng đầu về cách học Python. Hướng dẫn cũng bao gồm danh sách tài nguyên và khóa học giúp nâng cao kiến thức Python.