python - सूची से किसी आइटम को यादृच्छिक रूप से कैसे चुनें?




list random (8)

मान लें कि मेरे पास निम्न सूची है:

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

इस सूची से यादृच्छिक रूप से किसी आइटम को पुनर्प्राप्त करने का सबसे आसान तरीका क्या है?


सूची से किसी आइटम को यादृच्छिक रूप से कैसे चुनें?

मान लें कि मेरे पास निम्न सूची है:

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

इस सूची से यादृच्छिक रूप से किसी आइटम को पुनर्प्राप्त करने का सबसे आसान तरीका क्या है?

यदि आप वास्तव में यादृच्छिक के करीब चाहते हैं, तो मैं random मॉड्यूल से सिस्टम विधि random ऑब्जेक्ट का उपयोग करने का सुझाव देता हूं:

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

और अब:

>>> 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'

यदि आप एक निर्धारक छद्म यादृच्छिक चयन चाहते हैं, तो choice फ़ंक्शन का उपयोग करें (जो वास्तव में एक Random वस्तु पर एक बाध्य विधि है):

>>> random.choice
<bound method Random.choice of <random.Random object at 0x800c1034>>

यह यादृच्छिक प्रतीत होता है, लेकिन यह वास्तव में नहीं है, जिसे हम देख सकते हैं कि क्या हमने बार-बार शोध किया है:

>>> 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')

अगर आपको इंडेक्स की आवश्यकता है तो बस इसका इस्तेमाल करें:

import random
foo = ['a', 'b', 'c', 'd', 'e']
print int(random.random() * len(foo))
print foo[int(random.random() * len(foo))]

random.choice वही करता है :)


मैं एक सूची से बेतरतीब ढंग से उठाए गए आइटम को हटाने के लिए एक स्क्रिप्ट का प्रस्ताव देता हूं जब तक यह खाली न हो:

एक set बनाए रखें और सूची खाली होने तक यादृच्छिक रूप से उठाए गए तत्व ( choice साथ) को हटा दें।

s=set(range(1,6))
import random

while len(s)>0:
  s.remove(random.choice(list(s)))
  print(s)

तीन रन तीन अलग-अलग जवाब देते हैं:

>>> 
set([1, 3, 4, 5])
set([3, 4, 5])
set([3, 4])
set([4])
set([])
>>> 
set([1, 2, 3, 5])
set([2, 3, 5])
set([2, 3])
set([2])
set([])

>>> 
set([1, 2, 3, 5])
set([1, 2, 3])
set([1, 2])
set([1])
set([])

मैंने इसे काम करने के लिए किया:

import random
pick = ['Random','Random1','Random2','Random3']
print  (pick[int(random.random() * len(pick))])

यदि आपको इंडेक्स की भी आवश्यकता है:

foo = ['a', 'b', 'c', 'd', 'e']
from random import randrange
random_index = randrange(0,len(foo))
print foo[random_index]

यह एक वैरिएबल वाला कोड है जो यादृच्छिक अनुक्रमणिका को परिभाषित करता है:

import random

foo = ['a', 'b', 'c', 'd', 'e']
randomindex = random.randint(0,len(foo)-1) 
print (foo[randomindex])
## print (randomindex)

यह चर के बिना कोड है:

import random

foo = ['a', 'b', 'c', 'd', 'e']
print (foo[random.randint(0,len(foo)-1)])

और यह कोड करने के सबसे छोटे और सबसे अच्छे तरीके में कोड है:

import random

foo = ['a', 'b', 'c', 'd', 'e']
print(random.choice(foo))

(पायथन 2.7)


random.choice प्रयोग करें:

import random

foo = ['a', 'b', 'c', 'd', 'e']
print(random.choice(foo))

क्रिप्टोग्राफिक रूप से सुरक्षित यादृच्छिक विकल्पों के लिए (उदाहरण के लिए एक वर्डलिस्ट से पासफ्रेज उत्पन्न करने के लिए), random.SystemRandom उपयोग करें। random.SystemRandom क्लास:

import random

foo = ['battery', 'correct', 'horse', 'staple']
secure_random = random.SystemRandom()
print(secure_random.choice(foo))

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

पायथन 2 में:

random_items = random.sample(population=foo, k=number_of_samples)

पायथन 3 में:

random_items = random.choices(population=foo, k=number_of_samples)




random