Thông báo: Download 4 khóa học Python từ cơ bản đến nâng cao tại đây.
Cách chọn ngẫu nhiên một phần tử từ danh sách trong Python
Trong bài viết này, chúng ta sẽ tìm hiểu các cách khác nhau để chọn một phần tử ngẫu nhiên từ danh sách trong Python. Giả sử bạn có một danh sách tên người dùng Twitter và cần chọn ngẫu nhiên một người dùng từ danh sách đó.
Dưới đây là danh sách mẫu:
twitter_user_names = [ '@rahulbanerjee99', '@python_engineer', '@FCBarcelona', '@FerranTorres20', '@elonmusk', '@binance', '@SpaceX' ]
Thư viện random
trong Python
Thư viện random
là một thư viện tích hợp sẵn trong Python, tức là bạn không cần phải cài đặt thêm gì. Dưới đây là 3 cách khác nhau để chọn ngẫu nhiên một phần tử từ danh sách với thư viện random
.
Sử dụng chỉ mục ngẫu nhiên
import random num_items = len(twitter_user_names) random_index = random.randrange(num_items) winner = twitter_user_names[random_index] print(winner)
Kết quả mẫu:
Bài viết này được đăng tại [free tuts .net]
@binance
random.randrange(num_items)
trả về một số ngẫu nhiên từ0
đếnnum_items - 1
.- Sau đó, số này được dùng làm chỉ mục để truy cập phần tử tương ứng trong danh sách.
Sử dụng random.choice()
winner = random.choice(twitter_user_names) print(winner)
Kết quả mẫu:
@SpaceX
- Hàm
random.choice()
nhận vào một chuỗi (sequence), chẳng hạn danh sách, và trả về một phần tử ngẫu nhiên từ đó. - Đây là cách đơn giản và ngắn gọn nhất để chọn một phần tử ngẫu nhiên.
Chọn nhiều phần tử ngẫu nhiên với random.sample()
winners = random.sample(twitter_user_names, 2) print(winners)
Kết quả mẫu:
['@python_engineer', '@rahulbanerjee99']
- Hàm
random.sample()
tương tự nhưrandom.choice()
, nhưng cho phép bạn chỉ định số lượng phần tử ngẫu nhiên cần chọn. - Hàm này trả về một danh sách chứa các phần tử được chọn.
Giữ kết quả ngẫu nhiên cố định với random.seed()
Trong một số trường hợp, bạn có thể muốn kết quả ngẫu nhiên giống nhau mỗi lần chạy chương trình (ví dụ, để gỡ lỗi). Sử dụng random.seed()
sẽ đảm bảo điều này.
random.seed(0) winner = random.choice(twitter_user_names) print(winner)
random.seed()
nhận vào một số nguyên.- Nếu bạn sử dụng cùng một giá trị cho tham số seed, kết quả ngẫu nhiên sẽ luôn giống nhau.
Thư viện secrets
trong Python
Thư viện secrets
được ưu tiên hơn so với random
trong các trường hợp cần độ bảo mật cao, ví dụ như chọn mật khẩu ngẫu nhiên hoặc xử lý thông tin nhạy cảm.
Lưu ý: Thư viện này có sẵn từ Python 3.6 trở lên. Nếu bạn dùng phiên bản thấp hơn, cần cài đặt thêm gói backport của secrets
.
Sử dụng chỉ mục ngẫu nhiên với secrets.randbelow()
import secrets num_items = len(twitter_user_names) random_index = secrets.randbelow(num_items) winner = twitter_user_names[random_index] print(winner)
Kết quả mẫu:
@binance
- Hàm
secrets.randbelow(num_items)
tương tự nhưrandom.randrange()
, trả về một số ngẫu nhiên trong khoảng từ0
đếnnum_items - 1
.
Sử dụng secrets.choice()
winner = secrets.choice(twitter_user_names) print(winner)
Kết quả mẫu:
@binance
- Hàm
secrets.choice()
hoạt động giốngrandom.choice()
, trả về một phần tử ngẫu nhiên từ danh sách được truyền vào. - Ưu điểm là bảo mật tốt hơn.
Chọn nhiều phần tử ngẫu nhiên với secrets.SystemRandom().sample()
winners = secrets.SystemRandom().sample(twitter_user_names, 2) print(winners)
Kết quả mẫu:
['@SpaceX', '@binance']
secrets.SystemRandom()
cung cấp cách tạo số ngẫu nhiên bảo mật cao.- Hàm
sample()
hoạt động giống vớirandom.sample()
, cho phép chọn nhiều phần tử từ danh sách.
Lưu ý về secrets
và tính ngẫu nhiên cố định
Không giống như thư viện random
, secrets
không hỗ trợ cơ chế giữ kết quả ngẫu nhiên cố định (bằng seed). Vì vậy, mỗi lần chạy, bạn sẽ luôn nhận được kết quả khác nhau.
Khi nào nên sử dụng random
và secrets
?
- Sử dụng
random
cho các tác vụ thông thường, như chọn ngẫu nhiên phần tử từ danh sách không yêu cầu bảo mật. - Sử dụng
secrets
khi cần xử lý thông tin nhạy cảm hoặc yêu cầu bảo mật cao, chẳng hạn chọn mật khẩu hoặc mã xác thực.
Kết bài
Bạn có thể chọn ngẫu nhiên một phần tử từ danh sách trong Python bằng nhiều cách, tùy thuộc vào yêu cầu cụ thể:
Cách thực hiện | Thư viện | Phương pháp | Độ phức tạp |
---|---|---|---|
Chỉ mục ngẫu nhiên | random | random.randrange() |
Cơ bản |
Phần tử ngẫu nhiên | random | random.choice() |
Cơ bản |
Nhiều phần tử ngẫu nhiên | random | random.sample() |
Trung bình |
Bảo mật cao (ngẫu nhiên) | secrets | secrets.choice() / .sample() |
Nâng cao |
Chọn phương pháp phù hợp sẽ giúp bạn đạt được kết quả nhanh và tối ưu nhất.