Answers:
භාවිත random.choice()
import random
foo = ['a', 'b', 'c', 'd', 'e']
print(random.choice(foo))
සඳහා cryptographically සුරක්ෂිත අහඹු තෝරා ගැනීම් (අ wordlist සිට මුරවදනක් ජනනය සඳහා උදා:) භාවිතයsecrets.choice()
import secrets
foo = ['battery', 'correct', 'horse', 'staple']
print(secrets.choice(foo))
secrets
පයිතන් 3.6 හි අළුත් ය, පැරණි පයිතන් අනුවාද වල ඔබට random.SystemRandom
පන්තිය භාවිතා කළ හැකිය :
import random
secure_random = random.SystemRandom()
print(secure_random.choice(foo))
random.sample(lst, n)
ඔබට අහඹු ලෙස ලැයිස්තුවකින් අයිතමයකට වඩා තෝරා ගැනීමට හෝ කට්ටලයකින් අයිතමයක් තෝරා ගැනීමට අවශ්ය නම්, ඒ random.sample
වෙනුවට භාවිතා කිරීමට මම නිර්දේශ කරමි .
import random
group_of_items = {1, 2, 3, 4} # a sequence or set will work here.
num_to_select = 2 # set the number to select here.
list_of_random_items = random.sample(group_of_items, num_to_select)
first_random_item = list_of_random_items[0]
second_random_item = list_of_random_items[1]
ඔබ ලැයිස්තුවෙන් එක අයිතමයක් පමණක් අදින්නේ නම්, තේරීම අඩු විකාරයකි, නියැදිය භාවිතා කිරීම random.sample(some_list, 1)[0]
වෙනුවට සින්ටැක්ස් ඇත random.choice(some_list)
.
අවාසනාවකට මෙන්, තේරීම ක්රියාත්මක වන්නේ අනුපිළිවෙලින් (ලැයිස්තු හෝ ටුපල් වැනි) එක් ප්රතිදානයක් සඳහා පමණි. random.choice(tuple(some_set))
කට්ටලයකින් තනි අයිතමයක් ලබා ගැනීම සඳහා විකල්පයක් වුවද .
සංස්කරණය කරන්න: රහස් භාවිතා කිරීම
බොහෝ දෙනා පෙන්වා දී ඇති පරිදි, ඔබට වඩාත් ආරක්ෂිත ව්යාජ සාම්පල අවශ්ය නම්, ඔබ රහස් මොඩියුලය භාවිතා කළ යුතුය:
import secrets # imports secure module.
secure_random = secrets.SystemRandom() # creates a secure random object.
group_of_items = {1, 2, 3, 4} # a sequence or set will work here.
num_to_select = 2 # set the number to select here.
list_of_random_items = secure_random.sample(group_of_items, num_to_select)
first_random_item = list_of_random_items[0]
second_random_item = list_of_random_items[1]
සංස්කරණය කරන්න: පයිතොනික් වන්-ලයිනර්
බහුවිධ අයිතම තෝරා ගැනීම සඳහා ඔබට වඩාත් පයිතොනික් එක්-ලයිනර් අවශ්ය නම්, ඔබට ඉවත් කිරීම භාවිතා කළ හැකිය.
import random
first_random_item, second_random_item = random.sample(group_of_items, 2)
secrets
මොඩියුලය අනුවාදය 3.6 Python පුස්තකාලයක් එක් කරන ලදී python.org/dev/peps/pep-0506
ඔබට දර්ශකයද අවශ්ය නම් භාවිතා කරන්න random.randrange
from random import randrange
random_index = randrange(len(foo))
print(foo[random_index])
පයිතන් 3.6 වන විට ඔබට secrets
මොඩියුලය භාවිතා කළ හැකියrandom
ගුප්ත ලේඛනකරණය හෝ ආරක්ෂක භාවිතය සඳහා මොඩියුලයට .
ලැයිස්තුවකින් අහඹු අංගයක් මුද්රණය කිරීම සඳහා:
import secrets
foo = ['a', 'b', 'c', 'd', 'e']
print(secrets.choice(foo))
අහඹු දර්ශකයක් මුද්රණය කිරීම සඳහා:
print(secrets.randbelow(len(foo)))
වැඩි විස්තර සඳහා PEP 506 බලන්න .
ලැයිස්තුවෙන් අහඹු ලෙස ලබාගත් අයිතම හිස් වන තුරු ඉවත් කිරීම සඳහා ස්ක්රිප්ට් එකක් මා යෝජනා කරනවා:
එය පවත්වාගෙන 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([])
random.shuffle
ද list
එය වඩාත් කැපීපෙනේ හෝ නිෂ්පාදන ප්රතිඵල එය උත්පතනය හෝ එක් වරක්. එක්කෝ පරිපූර්ණ ප්රමාණවත් “පුනරාවර්තනයක් නොමැතිව අහඹු ලෙස තෝරන්න” ප්රවාහයක් ලැබෙනු ඇත, එය ආරම්භයේදීම අහඹු බව හඳුන්වා දෙනු ඇත.
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.choices
ප්රතිස්ථාපනයකින් random.sample
තොරව ප්රතිස්ථාපනය කරන බව සලකන්න .
numpy
විසඳුමක්: numpy.random.choice
මෙම ප්රශ්නය සඳහා, එය පිළිගත් පිළිතුරට සමාන වේ ( import random; random.choice()
), නමුත් මම එය එකතු කළේ ක්රමලේඛකයා numpy
දැනටමත් ආනයනය කර ඇති නිසා (මා වැනි) සහ ඔබේ සත්ය භාවිත නඩුව සම්බන්ධයෙන් සැලකිලිමත් විය හැකි ක්රම දෙක අතර යම් යම් වෙනස්කම් ඇති බැවිනි.
import numpy as np
np.random.choice(foo) # randomly selects a single item
ප්රජනන හැකියාව සඳහා, ඔබට කළ හැක්කේ:
np.random.seed(123)
np.random.choice(foo) # first call will always return 'c'
අයිතම එකක් හෝ වැඩි ගණනක සාම්පල සඳහා , ලෙස ආපසු array
ලබා දී, size
තර්කය සම්මත කරන්න :
np.random.choice(foo, 5) # sample with replacement (default)
np.random.choice(foo, 5, False) # sample without replacement
ලැයිස්තුවකින් අයිතමයක් අහඹු ලෙස තෝරා ගන්නේ කෙසේද?
මට පහත ලැයිස්තුවක් ඇතැයි උපකල්පනය කරන්න:
foo = ['a', 'b', 'c', 'd', 'e']
මෙම ලැයිස්තුවෙන් අහඹු ලෙස අයිතමයක් ලබා ගැනීමට ඇති සරලම ක්රමය කුමක්ද?
ඔබට සැබවින්ම අහඹු ලෙස සමීප වීමට අවශ්ය නම් , මම secrets.choice
සම්මත පුස්තකාලයෙන් යෝජනා කරමි (නව පයිතන් 3.6.):
>>> from secrets import choice # Python 3 only
>>> choice(list('abcde'))
'c'
ඉහත සඳහන් මගේ කලින් නිර්දේශයට සමාන වේ SystemRandom
, random
මොඩියුලයේ වස්තුවක් choice
ක්රමවේදය සමඟ භාවිතා කිරීම - මීට පෙර පයිතන් 2 හි ඇත:
>>> import random # Python 2 compatible
>>> 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')
මෙය random.choice සැබවින්ම අහඹුද නැද්ද යන්න ගැන නොවේ. ඔබ බීජ සවි කළහොත් ඔබට ප්රජනන ප්රති results ල ලැබෙනු ඇත - බීජ සඳහා නිර්මාණය කර ඇත්තේ එයයි. ඔබට SystemRandom වෙත බීජයක් ද ලබා දිය හැකිය.
sr = random.SystemRandom(42)
හොඳයි, ඔව් ඔබට එය "බීජ" තර්කයක් ඉදිරිපත් කළ හැකිය, නමුත් SystemRandom
වස්තුව එය නොසලකා හරින බව ඔබට පෙනෙනු ඇත :
def seed(self, *args, **kwds):
"Stub method. Not used for a system random number generator."
return None
ඔබට දර්ශකය අවශ්ය නම් භාවිතා කරන්න:
import random
foo = ['a', 'b', 'c', 'd', 'e']
print int(random.random() * len(foo))
print foo[int(random.random() * len(foo))]
random.choice එකම දේ කරයි :)
random.choice(self, seq)
වේ return seq[int(self.random() * len(seq))]
.
randrange()
අතර උදා: random.SystemRandom().randrange(3<<51)
සැලකිය යුතු නැඹුරුවක් පෙන්නුම් කරයි. සුසුම් ...
float
(IEEE ද්විත්ව) [0,1) හි සීමිත අගයන් සංඛ්යාවක් පමණක් ගත හැකි බැවිනි. Random.random()
සාම්ප්රදායික ආකාරයෙන් එහි ප්රතිදානය ජනනය කරයි: අහඹු නිඛිලයක් තෝරාගෙන [0, 2**53)
බෙදන්න 2**53
(53 යනු ද්විත්ව බිටු ගණන). එබැවින් random()
2 ** 53 සමතුලිත කළ හැකි දෙගුණයක් ලබා දෙන අතර, ඔබට මෙය ඒකාකාරව N ප්රතිදානයන් ලෙස බෙදිය හැක්කේ N 2 බලයක් නම් පමණි. නැඹුරුව කුඩා N සඳහා කුඩා වන නමුත් බලන්න collections.Counter(random.SystemRandom().randrange(3<<51)%6 for i in range(100000)).most_common()
. (Java's Random.nextInt () එවැනි නැඹුරුවාවන් වළක්වයි.)
2**40
(1099511627776) ට වඩා අඩු යමක් , පක්ෂග්රාහීව ප්රායෝගිකව වැදගත් නොවන තරමට කුඩා වනු ඇතැයි මම සිතමි. මෙය ඇත්ත වශයෙන්ම ප්රලේඛනයේ පෙන්වා දිය යුතුය, මන්ද යමෙකු සූක්ෂම නොවන්නේ නම්, ඔවුන්ගේ කේතයේ මෙම කොටසින් ගැටළු පැමිණෙනු ඇතැයි ඔවුන් අපේක්ෂා නොකරනු ඇත.
random
භාවිතා කරයි ( එයද භාවිතා කරයි). මෙය 2.7 සහ 3.5 යන දෙඅංශයෙන්ම සත්ය වේ. එය භාවිතා කරන්නේ නොමැති විට පමණි . එය ඔබ සිතන මෝඩ වැඩ නොවේ. getrandbits
randrange
random.choice
self.random() * len(seq)
getrandbits
සසම්භාවී දර්ශකය අර්ථ දක්වන විචල්යයක් සහිත කේතය මෙයයි:
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)
ඔබට එකම අයිතම නිෂ්පාදනය කිරීමට අවශ්ය නම් පහත කේතය පෙන්වයි. ඔබට නිස්සාරණය කිරීමට අවශ්ය සාම්පල කීයක් ද සඳහන් කළ හැකිය.
මෙම sample
ක්රමය මගින් ජනගහනයේ මූලද්රව්ය අඩංගු නව ලැයිස්තුවක් ලබා දෙන අතර මුල් ජනගහනය නොවෙනස්ව පවතී. එහි ප්රති ing ලයක් ලෙස ලැයිස්තුව තේරීමේ අනුපිළිවෙලින් ඇති අතර එමඟින් සියලුම උප පෙති වලංගු අහඹු සාම්පල වේ.
import random as random
random.seed(0) # don't use seed function, if you want different results in each run
print(random.sample(foo,3)) # 3 is the number of sample you want to retrieve
Output:['d', 'e', 'a']
import random
my_list = [1, 2, 3, 4, 5]
num_selections = 2
new_list = random.sample(my_list, num_selections)
randIndex = random.sample(range(len(my_list)), n_selections)
randIndex.sort()
new_list = [my_list[i] for i in randIndex]
අපට මෙය අහඹු ලෙස භාවිතා කළ හැකිය.
from random import randint
l= ['a','b','c']
def get_rand_element(l):
if l:
return l[randint(0,len(l)-1)]
else:
return None
get_rand_element(l)
random.choice()
සහ එසේ random.randrange()
කරන්නේ ඇයි?
None
අවලංගු “මූලද්රව්යය” ව්යතිරේකයක් අවුලුවන අහඹු පසු ස්ථානයකට කෑන් එක පයින් ගසයි; හෝ ඊටත් වඩා නරක නම්, ඔබ ව්යතිරේකයක් වෙනුවට වැරදි වැඩසටහනක් ලබා ගනී, ඔබ එය පවා දන්නේ නැත.
ඔබට පුළුවන්:
from random import randint
foo = ["a", "b", "c", "d", "e"]
print(foo[randint(0,4)])
random.choice(foo)
වෙනස් ප්රති results ල දෙකක් ලැබේද?