python - والمخرجات - موسوعة حسوب بايثون




كيفية اختيار عنصر بشكل عشوائي من القائمة؟ (8)

كيفية اختيار عنصر بشكل عشوائي من القائمة؟

افترض أن لدي القائمة التالية:

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

ما هي أبسط طريقة لاسترداد عنصر عشوائي من هذه القائمة؟

إذا كنت تريد الاقتراب من عشوائي بشكل حقيقي ، عندها أقترح استخدام كائن SystemRandom من الوحدة النمطية random باستخدام طريقة choice :

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

إذا كنت تريد تحديد pseudorandom محدد ، استخدم وظيفة 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')

افترض أن لدي القائمة التالية:

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

ما هي أبسط طريقة لاسترداد عنصر عشوائي من هذه القائمة؟


أقترح برنامجًا نصيًا لإزالة العناصر التي تم اختيارها عشوائياً من القائمة إلى أن تصبح فارغة:

الحفاظ على 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.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)) قد يكون خيارًا للحصول على عنصر واحد من مجموعة.


استخدم random.choice :

import random

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

للحصول على خيارات عشوائية آمنة مشفرة (على سبيل المثال ، لإنشاء عبارة مرور من قائمة كلمات) ، استخدم random.SystemRandom class:

import random

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

في حال كنت بحاجة أيضا إلى الفهرس:

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

لقد فعلت هذا لأجعله يعمل:

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

يمكننا أيضا القيام بذلك باستخدام randint.

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)

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

في الثعبان 2:

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

في python 3:

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




random