Hướng dẫn how do you pick a random item in a list python? - làm thế nào để bạn chọn một mục ngẫu nhiên trong một con trăn danh sách?

Làm thế nào để chọn ngẫu nhiên một mục từ một danh sách?

Giả sử tôi có danh sách sau:

foo = ['a', 'b', 'c', 'd', 'e']  

Cách đơn giản nhất để lấy một mục ngẫu nhiên từ danh sách này là gì?

Nếu bạn muốn gần với thực sự ngẫu nhiên, thì tôi đề nghị

>>> import random                      # Python 2 compatible
>>> sr = random.SystemRandom()
>>> foo = list('abcde')
>>> foo
['a', 'b', 'c', 'd', 'e']
3 từ thư viện tiêu chuẩn (mới trong Python 3.6.):truly random, then I suggest
>>> import random                      # Python 2 compatible
>>> sr = random.SystemRandom()
>>> foo = list('abcde')
>>> foo
['a', 'b', 'c', 'd', 'e']
3 from the standard library (New in Python 3.6.):

>>> from secrets import choice         # Python 3 only
>>> choice(list('abcde'))
'c'

Trên đây tương đương với khuyến nghị trước đây của tôi, sử dụng đối tượng

>>> import random                      # Python 2 compatible
>>> sr = random.SystemRandom()
>>> foo = list('abcde')
>>> foo
['a', 'b', 'c', 'd', 'e']
4 từ mô -đun
>>> import random                      # Python 2 compatible
>>> sr = random.SystemRandom()
>>> foo = list('abcde')
>>> foo
['a', 'b', 'c', 'd', 'e']
5 với phương thức
>>> import random                      # Python 2 compatible
>>> sr = random.SystemRandom()
>>> foo = list('abcde')
>>> foo
['a', 'b', 'c', 'd', 'e']
6 - có sẵn trước đó trong Python 2:

>>> import random                      # Python 2 compatible
>>> sr = random.SystemRandom()
>>> foo = list('abcde')
>>> foo
['a', 'b', 'c', 'd', 'e']

Và bây giờ:

>>> sr.choice(foo)
'd'
>>> sr.choice(foo)
'e'
>>> sr.choice(foo)
'a'
>>> sr.choice(foo)
'b'
>>> sr.choice(foo)
'a'
>>> sr.choice(foo)
'c'
>>> sr.choice(foo)
'c'

Nếu bạn muốn lựa chọn giả giả xác định, hãy sử dụng hàm

>>> import random                      # Python 2 compatible
>>> sr = random.SystemRandom()
>>> foo = list('abcde')
>>> foo
['a', 'b', 'c', 'd', 'e']
6 (thực sự là một phương thức ràng buộc trên đối tượng
>>> import random                      # Python 2 compatible
>>> sr = random.SystemRandom()
>>> foo = list('abcde')
>>> foo
['a', 'b', 'c', 'd', 'e']
8):

>>> random.choice
>

Có vẻ như ngẫu nhiên, nhưng nó thực sự không, mà chúng ta có thể thấy nếu chúng ta liên tục liên tục:

>>> random.seed(42); random.choice(foo), random.choice(foo), random.choice(foo)
('d', 'a', 'b')
>>> random.seed(42); random.choice(foo), random.choice(foo), random.choice(foo)
('d', 'a', 'b')
>>> random.seed(42); random.choice(foo), random.choice(foo), random.choice(foo)
('d', 'a', 'b')
>>> random.seed(42); random.choice(foo), random.choice(foo), random.choice(foo)
('d', 'a', 'b')
>>> random.seed(42); random.choice(foo), random.choice(foo), random.choice(foo)
('d', 'a', 'b')

Một lời bình luận:

Đây không phải là về việc liệu ngẫu nhiên.choice có thực sự ngẫu nhiên hay không. Nếu bạn sửa chữa hạt giống, bạn sẽ nhận được kết quả có thể tái tạo - và đó là những gì hạt giống được thiết kế cho. Bạn cũng có thể chuyển một hạt giống cho Systemrandom.

>>> import random                      # Python 2 compatible
>>> sr = random.SystemRandom()
>>> foo = list('abcde')
>>> foo
['a', 'b', 'c', 'd', 'e']
9

Chà, vâng, bạn có thể chuyển nó một đối số "hạt giống", nhưng bạn sẽ thấy rằng đối tượng

>>> import random                      # Python 2 compatible
>>> sr = random.SystemRandom()
>>> foo = list('abcde')
>>> foo
['a', 'b', 'c', 'd', 'e']
4 chỉ đơn giản bỏ qua nó:

def seed(self, *args, **kwds):
    "Stub method.  Not used for a system random number generator."
    return None

Giới thiệu

Chọn một phần tử hoặc giá trị ngẫu nhiên từ danh sách là một nhiệm vụ chung - có thể là kết quả ngẫu nhiên từ danh sách các đề xuất hoặc chỉ là một lời nhắc ngẫu nhiên.

Trong bài viết này, chúng ta sẽ xem xét cách chọn ngẫu nhiên các yếu tố từ danh sách trong Python. Chúng tôi sẽ bao gồm việc truy xuất cả hai yếu tố ngẫu nhiên số ít, cũng như truy xuất nhiều yếu tố - có và không có sự lặp lại.

Chọn một phần tử ngẫu nhiên từ danh sách Python

Cách tiếp cận trực quan và tự nhiên nhất để giải quyết vấn đề này là tạo ra một số ngẫu nhiên hoạt động như một chỉ mục để truy cập một phần tử từ danh sách.

Để thực hiện phương pháp này, hãy xem xét một số phương pháp để tạo ra các số ngẫu nhiên trong Python:

>>> sr.choice(foo)
'd'
>>> sr.choice(foo)
'e'
>>> sr.choice(foo)
'a'
>>> sr.choice(foo)
'b'
>>> sr.choice(foo)
'a'
>>> sr.choice(foo)
'c'
>>> sr.choice(foo)
'c'
1 và
>>> sr.choice(foo)
'd'
>>> sr.choice(foo)
'e'
>>> sr.choice(foo)
'a'
>>> sr.choice(foo)
'b'
>>> sr.choice(foo)
'a'
>>> sr.choice(foo)
'c'
>>> sr.choice(foo)
'c'
2. Chúng ta cũng có thể sử dụng
>>> sr.choice(foo)
'd'
>>> sr.choice(foo)
'e'
>>> sr.choice(foo)
'a'
>>> sr.choice(foo)
'b'
>>> sr.choice(foo)
'a'
>>> sr.choice(foo)
'c'
>>> sr.choice(foo)
'c'
3 và cung cấp một điều khác - dẫn đến một yếu tố ngẫu nhiên từ đó có thể được trả lại.

Sử dụng ngẫu nhiên.randint ()

>>> sr.choice(foo)
'd'
>>> sr.choice(foo)
'e'
>>> sr.choice(foo)
'a'
>>> sr.choice(foo)
'b'
>>> sr.choice(foo)
'a'
>>> sr.choice(foo)
'c'
>>> sr.choice(foo)
'c'
4 Trả về một số nguyên ngẫu nhiên giữa bao gồm
>>> sr.choice(foo)
'd'
>>> sr.choice(foo)
'e'
>>> sr.choice(foo)
'a'
>>> sr.choice(foo)
'b'
>>> sr.choice(foo)
'a'
>>> sr.choice(foo)
'c'
>>> sr.choice(foo)
'c'
5 và
>>> sr.choice(foo)
'd'
>>> sr.choice(foo)
'e'
>>> sr.choice(foo)
'a'
>>> sr.choice(foo)
'b'
>>> sr.choice(foo)
'a'
>>> sr.choice(foo)
'c'
>>> sr.choice(foo)
'c'
6.

Chúng tôi sẽ muốn chỉ mục ngẫu nhiên trong phạm vi

>>> sr.choice(foo)
'd'
>>> sr.choice(foo)
'e'
>>> sr.choice(foo)
'a'
>>> sr.choice(foo)
'b'
>>> sr.choice(foo)
'a'
>>> sr.choice(foo)
'c'
>>> sr.choice(foo)
'c'
7 đến
>>> sr.choice(foo)
'd'
>>> sr.choice(foo)
'e'
>>> sr.choice(foo)
'a'
>>> sr.choice(foo)
'b'
>>> sr.choice(foo)
'a'
>>> sr.choice(foo)
'c'
>>> sr.choice(foo)
'c'
8, để có một chỉ mục ngẫu nhiên của một phần tử trong danh sách:

import random

letters = ['a', 'b', 'c', 'd', 'e', 'f']
random_index = random.randint(0,len(letters)-1)

print(letters[random_index])

Chạy mã này nhiều lần mang lại cho chúng tôi:

e
c
f
a

Sử dụng ngẫu nhiên.randrange ()

>>> sr.choice(foo)
'd'
>>> sr.choice(foo)
'e'
>>> sr.choice(foo)
'a'
>>> sr.choice(foo)
'b'
>>> sr.choice(foo)
'a'
>>> sr.choice(foo)
'c'
>>> sr.choice(foo)
'c'
9 là một phương thức khác trả về số ngẫu nhiên
>>> random.choice
>
0 sao cho
>>> random.choice
>
1:

import random

letters = ['a', 'b', 'c', 'd', 'e', 'f']
random_index = random.randrange(len(letters))

print(letters[random_index])

Chạy mã này nhiều lần sẽ tạo ra một cái gì đó dọc theo các dòng:

>>> from secrets import choice         # Python 3 only
>>> choice(list('abcde'))
'c'
0

Khi

>>> random.choice
>
2 trả về một số được tạo ngẫu nhiên trong phạm vi
>>> sr.choice(foo)
'd'
>>> sr.choice(foo)
'e'
>>> sr.choice(foo)
'a'
>>> sr.choice(foo)
'b'
>>> sr.choice(foo)
'a'
>>> sr.choice(foo)
'c'
>>> sr.choice(foo)
'c'
7 đến
>>> random.choice
>
4, chúng tôi sử dụng nó để truy cập một phần tử một cách ngẫu nhiên trong
>>> random.choice
>
5, giống như chúng tôi đã làm trong phương pháp trước đó.

Cách tiếp cận này đơn giản hơn một chút so với lần trước, đơn giản vì chúng tôi không chỉ định điểm bắt đầu, mặc định là

>>> sr.choice(foo)
'd'
>>> sr.choice(foo)
'e'
>>> sr.choice(foo)
'a'
>>> sr.choice(foo)
'b'
>>> sr.choice(foo)
'a'
>>> sr.choice(foo)
'c'
>>> sr.choice(foo)
'c'
7.

Sử dụng ngẫu nhiên.choice ()

Bây giờ, một giải pháp thậm chí còn tốt hơn so với trước đây là sử dụng

>>> sr.choice(foo)
'd'
>>> sr.choice(foo)
'e'
>>> sr.choice(foo)
'a'
>>> sr.choice(foo)
'b'
>>> sr.choice(foo)
'a'
>>> sr.choice(foo)
'c'
>>> sr.choice(foo)
'c'
3 vì đây chính là chức năng được thiết kế để giải quyết vấn đề này:

>>> from secrets import choice         # Python 3 only
>>> choice(list('abcde'))
'c'
1

Chạy nhiều lần này kết quả trong:

>>> from secrets import choice         # Python 3 only
>>> choice(list('abcde'))
'c'
2

Chọn nhiều hơn một phần tử ngẫu nhiên từ danh sách Python

Sử dụng ngẫu nhiên.sample ()

Phương pháp đầu tiên mà chúng ta có thể sử dụng để chọn nhiều phần tử một cách ngẫu nhiên là

>>> random.choice
>
8. Nó tạo ra một mẫu, dựa trên số lượng mẫu chúng tôi muốn quan sát:

>>> from secrets import choice         # Python 3 only
>>> choice(list('abcde'))
'c'
3

Điều này trả về một danh sách:

>>> from secrets import choice         # Python 3 only
>>> choice(list('abcde'))
'c'
4

Phương pháp này chọn các yếu tố mà không cần thay thế, tức là, nó chọn mà không sao chép và lặp lại.

Nếu chúng ta chạy cái này:

>>> from secrets import choice         # Python 3 only
>>> choice(list('abcde'))
'c'
5

Vì nó không trả lại bản sao, nó sẽ chỉ trả lại toàn bộ danh sách của chúng tôi theo thứ tự ngẫu nhiên:

>>> from secrets import choice         # Python 3 only
>>> choice(list('abcde'))
'c'
6

Sử dụng ngẫu nhiên.choices ()

Tương tự như hàm trước,

>>> random.choice
>
9 trả về một danh sách các phần tử được chọn ngẫu nhiên từ một số ít nhất định. Mặc dù vậy, nó không theo dõi các yếu tố đã chọn, vì vậy bạn cũng có thể nhận được các yếu tố trùng lặp:

Kiểm tra hướng dẫn thực hành của chúng tôi, thực tế để học Git, với các thực hành tốt nhất, các tiêu chuẩn được công nghiệp chấp nhận và bao gồm bảng gian lận. Ngừng các lệnh git googling và thực sự tìm hiểu nó!

>>> from secrets import choice         # Python 3 only
>>> choice(list('abcde'))
'c'
7

Điều này trả về một cái gì đó dọc theo các dòng của:

>>> from secrets import choice         # Python 3 only
>>> choice(list('abcde'))
'c'
8

Ngoài ra, nếu chúng ta chạy:

>>> from secrets import choice         # Python 3 only
>>> choice(list('abcde'))
'c'
9

Nó có thể trả lại một cái gì đó như:

>>> import random                      # Python 2 compatible
>>> sr = random.SystemRandom()
>>> foo = list('abcde')
>>> foo
['a', 'b', 'c', 'd', 'e']
0

>>> random.seed(42); random.choice(foo), random.choice(foo), random.choice(foo)
('d', 'a', 'b')
>>> random.seed(42); random.choice(foo), random.choice(foo), random.choice(foo)
('d', 'a', 'b')
>>> random.seed(42); random.choice(foo), random.choice(foo), random.choice(foo)
('d', 'a', 'b')
>>> random.seed(42); random.choice(foo), random.choice(foo), random.choice(foo)
('d', 'a', 'b')
>>> random.seed(42); random.choice(foo), random.choice(foo), random.choice(foo)
('d', 'a', 'b')
0 Trả về danh sách các yếu tố ____ 51 được chọn ngẫu nhiên với sự thay thế.

Phương pháp này cũng có thể được sử dụng thực hiện các lựa chọn ngẫu nhiên có trọng số mà bạn có thể khám phá thêm trong tài liệu Python chính thức.

Chọn các yếu tố N ngẫu nhiên không có sự lặp lại

Nếu bạn đang tìm cách tạo ra các bộ sưu tập ngẫu nhiên các yếu tố N, không có sự lặp lại, nhiệm vụ dường như phức tạp hơn các nhiệm vụ trước đó, nhưng trong thực tế - nó khá đơn giản.

Bạn

>>> random.seed(42); random.choice(foo), random.choice(foo), random.choice(foo)
('d', 'a', 'b')
>>> random.seed(42); random.choice(foo), random.choice(foo), random.choice(foo)
('d', 'a', 'b')
>>> random.seed(42); random.choice(foo), random.choice(foo), random.choice(foo)
('d', 'a', 'b')
>>> random.seed(42); random.choice(foo), random.choice(foo), random.choice(foo)
('d', 'a', 'b')
>>> random.seed(42); random.choice(foo), random.choice(foo), random.choice(foo)
('d', 'a', 'b')
2 Danh sách và phân vùng nó thành N phần. Điều này đảm bảo rằng không có các yếu tố trùng lặp được thêm vào, vì bạn chỉ cắt danh sách và chúng tôi đã xáo trộn nó để các bộ sưu tập là ngẫu nhiên.

Nếu bạn muốn đọc thêm về việc chia danh sách thành các khối ngẫu nhiên hãy xem - làm thế nào để chia một danh sách thành các khối thậm chí trong Python.

Chúng tôi sẽ lưu kết quả trong một danh sách mới và nếu không có đủ các yếu tố để phù hợp với bộ sưu tập cuối cùng, thì nó sẽ chỉ còn dang dở:

>>> import random                      # Python 2 compatible
>>> sr = random.SystemRandom()
>>> foo = list('abcde')
>>> foo
['a', 'b', 'c', 'd', 'e']
1

Điều này dẫn đến một danh sách các cặp ngẫu nhiên, không có sự lặp lại:

>>> import random                      # Python 2 compatible
>>> sr = random.SystemRandom()
>>> foo = list('abcde')
>>> foo
['a', 'b', 'c', 'd', 'e']
2

Sự kết luận

Trong bài viết này, chúng tôi đã khám phá một số cách để truy xuất một hoặc nhiều phần tử được chọn ngẫu nhiên từ danh sách trong Python.

Chúng tôi đã truy cập danh sách trong các chỉ số ngẫu nhiên bằng cách sử dụng

>>> random.seed(42); random.choice(foo), random.choice(foo), random.choice(foo)
('d', 'a', 'b')
>>> random.seed(42); random.choice(foo), random.choice(foo), random.choice(foo)
('d', 'a', 'b')
>>> random.seed(42); random.choice(foo), random.choice(foo), random.choice(foo)
('d', 'a', 'b')
>>> random.seed(42); random.choice(foo), random.choice(foo), random.choice(foo)
('d', 'a', 'b')
>>> random.seed(42); random.choice(foo), random.choice(foo), random.choice(foo)
('d', 'a', 'b')
3 và
>>> random.seed(42); random.choice(foo), random.choice(foo), random.choice(foo)
('d', 'a', 'b')
>>> random.seed(42); random.choice(foo), random.choice(foo), random.choice(foo)
('d', 'a', 'b')
>>> random.seed(42); random.choice(foo), random.choice(foo), random.choice(foo)
('d', 'a', 'b')
>>> random.seed(42); random.choice(foo), random.choice(foo), random.choice(foo)
('d', 'a', 'b')
>>> random.seed(42); random.choice(foo), random.choice(foo), random.choice(foo)
('d', 'a', 'b')
4, nhưng cũng có các yếu tố ngẫu nhiên bằng cách sử dụng
>>> random.seed(42); random.choice(foo), random.choice(foo), random.choice(foo)
('d', 'a', 'b')
>>> random.seed(42); random.choice(foo), random.choice(foo), random.choice(foo)
('d', 'a', 'b')
>>> random.seed(42); random.choice(foo), random.choice(foo), random.choice(foo)
('d', 'a', 'b')
>>> random.seed(42); random.choice(foo), random.choice(foo), random.choice(foo)
('d', 'a', 'b')
>>> random.seed(42); random.choice(foo), random.choice(foo), random.choice(foo)
('d', 'a', 'b')
5 và
>>> random.seed(42); random.choice(foo), random.choice(foo), random.choice(foo)
('d', 'a', 'b')
>>> random.seed(42); random.choice(foo), random.choice(foo), random.choice(foo)
('d', 'a', 'b')
>>> random.seed(42); random.choice(foo), random.choice(foo), random.choice(foo)
('d', 'a', 'b')
>>> random.seed(42); random.choice(foo), random.choice(foo), random.choice(foo)
('d', 'a', 'b')
>>> random.seed(42); random.choice(foo), random.choice(foo), random.choice(foo)
('d', 'a', 'b')
6.

Làm thế nào để bạn chọn một mục ngẫu nhiên từ một danh sách trong Python?

Chọn các phần tử n ngẫu nhiên từ danh sách bằng cách sử dụng phương thức lựa chọn () được sử dụng để trả về một số ngẫu nhiên từ chuỗi đã cho.Trình tự có thể là một danh sách hoặc một tuple.using choice() The choice() method is used to return a random number from given sequence. The sequence can be a list or a tuple.

Làm thế nào để bạn nhận được các đối tượng ngẫu nhiên từ một danh sách?

Để có được một mục ngẫu nhiên từ một thể hiện danh sách, bạn cần tạo một số chỉ mục ngẫu nhiên và sau đó lấy một mục theo số chỉ mục được tạo này bằng phương thức list.get ().Điểm quan trọng ở đây là hãy nhớ rằng bạn không được sử dụng một chỉ mục vượt quá kích thước danh sách của bạn.generate a random index number and then fetch an item by this generated index number using List. get() method. The key point here is to remember that you mustn't use an index that exceeds your List's size.

Làm thế nào để bạn chọn một tập hợp ngẫu nhiên trong Python?

randint () và ngẫu nhiên.randrange ().Chúng tôi cũng có thể sử dụng ngẫu nhiên.Lựa chọn () và cung cấp một điều khác nhau - dẫn đến một yếu tố ngẫu nhiên từ đó có thể được trả lại. randrange() . We can additionally use random. choice() and supply an iterable - which results in a random element from that iterable being returned back.