Python معیاری لائبریری کے رینڈم ماڈیول میں فنکشن چوائس()، نمونہ()، اور چوائسز() کا استعمال فہرست، ٹوپل، سٹرنگ، یا دیگر سیکوینس آبجیکٹ (رینڈم سیمپلنگ) سے تصادفی طور پر عناصر کو منتخب کرنے اور بازیافت کرنے کے لیے کیا جا سکتا ہے۔
انتخاب () کو ایک عنصر ملتا ہے، نمونہ () اور انتخاب () کو متعدد عناصر کی فہرست ملتی ہے۔ نمونہ () بغیر کسی ڈپلیکیٹس کے ناقابل بازیافت نکالنے والا ہے، انتخاب () ڈپلیکیٹس کے ساتھ قابل بازیافت نکالنا ہے۔
درج ذیل معلومات یہاں فراہم کی گئی ہیں۔
- بے ترتیب ایک عنصر کو منتخب کریں۔:
random.choice() - تصادفی طور پر متعدد عناصر کو منتخب کریں (کوئی نقل نہیں):
random.sample() - تصادفی طور پر متعدد عناصر کو منتخب کریں (نقل کے ساتھ):
random.choices() - بے ترتیب نمبر کے بیج کو درست کریں۔
بے ترتیب ایک عنصر کو منتخب کریں۔:random.choice()
رینڈم ماڈیول کے فنکشن چوز() کے ساتھ، فہرست میں سے ایک عنصر کو بے ترتیب طور پر منتخب کیا جاتا ہے اور اسے دوبارہ حاصل کیا جا سکتا ہے۔
import random
l = [0, 1, 2, 3, 4]
print(random.choice(l))
# 1
ٹیپلز اور تاروں پر بھی یہی بات لاگو ہوتی ہے۔ سٹرنگز کے معاملے میں، ایک ہی کریکٹر کا انتخاب کیا جاتا ہے۔
print(random.choice(('xxx', 'yyy', 'zzz')))
# yyy
print(random.choice('abcde'))
# b
خرابی اگر خالی فہرست، ٹوپل، یا سٹرنگ کو بطور دلیل بیان کیا گیا ہو۔
# print(random.choice([]))
# IndexError: Cannot choose from an empty sequence
تصادفی طور پر متعدد عناصر کو منتخب کریں (کوئی نقل نہیں):random.sample()
بے ترتیب ماڈیول کے فنکشن نمونہ () کے ساتھ، آپ فہرست سے بے ترتیب طور پر متعدد عناصر حاصل کر سکتے ہیں۔ عناصر کی کوئی نقل نہیں ہے (نا قابل بازیافت نکالنا)۔
پہلی دلیل ایک فہرست ہے، اور دوسری دلیل بازیافت کیے جانے والے عناصر کی تعداد ہے۔ فہرست واپس کردی گئی ہے۔
import random
l = [0, 1, 2, 3, 4]
print(random.sample(l, 3))
# [2, 4, 0]
print(type(random.sample(l, 3)))
# <class 'list'>
اگر دوسری دلیل 1 پر سیٹ کی جاتی ہے تو، ایک عنصر کے ساتھ ایک فہرست بھی واپس آ جاتی ہے۔ اگر یہ 0 پر سیٹ ہے تو فہرست خالی ہے۔ اگر دوسری دلیل 1 ہے تو، ایک عنصر کے ساتھ ایک فہرست لوٹائی جاتی ہے۔ اگر یہ 0 ہے تو، ایک خالی فہرست واپس آ جاتی ہے۔ اگر پہلی دلیل فہرست میں عناصر کی تعداد سے زیادہ ہے تو، ایک خرابی واقع ہوتی ہے۔
print(random.sample(l, 1))
# [3]
print(random.sample(l, 0))
# []
# print(random.sample(l, 10))
# ValueError: Sample larger than population or is negative
اگر پہلی دلیل ایک ٹوپل یا سٹرنگ ہے، جو واپس کیا جاتا ہے وہ اب بھی ایک فہرست ہے۔
print(random.sample(('xxx', 'yyy', 'zzz'), 2))
# ['xxx', 'yyy']
print(random.sample('abcde', 2))
# ['b', 'e']
اگر آپ ٹپل یا سٹرنگ پر واپس جانا چاہتے ہیں تو tuple(),join() کا استعمال کریں۔
print(tuple(random.sample(('xxx', 'yyy', 'zzz'), 2)))
# ('xxx', 'yyy')
print(''.join(random.sample('abcde', 2)))
# dc
نوٹ کریں کہ قدر کا فیصلہ نہیں کیا جاتا ہے، لہذا اگر اصل فہرست یا ٹوپل میں ایک ہی قدر کے عناصر شامل ہیں، تو امکان ہے کہ وہی قدر منتخب کی جائے گی۔
l_dup = [0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3]
print(random.sample(l_dup, 3))
# [3, 1, 1]
اگر آپ ڈپلیکیٹ اقدار سے بچنا چاہتے ہیں، تو آپ سیٹ() کو سیٹ (سیٹ کی قسم) میں تبدیل کرنے کے لیے استعمال کر سکتے ہیں اور صرف منفرد عناصر کو نکال سکتے ہیں، اور پھر نمونہ () استعمال کر سکتے ہیں۔
print(set(l_dup))
# {0, 1, 2, 3}
print(random.sample(set(l_dup), 3))
# [1, 3, 2]
تصادفی طور پر متعدد عناصر کو منتخب کریں (نقل کے ساتھ):random.choices()
بے ترتیب ماڈیول کے فنکشن انتخاب () آپ کو فہرست سے بے ترتیب طور پر متعدد عناصر کو بازیافت کرنے کی اجازت دیتا ہے، اور نمونہ () کے برعکس، یہ ڈپلیکیٹ عناصر کو منتخب کرنے کی اجازت دیتا ہے۔
choices() Python 3.6 میں شامل ایک فنکشن ہے۔ یہ پہلے کے ورژن میں دستیاب نہیں ہے۔
استدلال k ان عناصر کی تعداد بتاتا ہے جنہیں بازیافت کرنا ہے۔ نقل کی اجازت ہے، لہذا بازیافت کیے جانے والے عناصر کی تعداد اصل فہرست میں موجود عناصر کی تعداد سے زیادہ ہو سکتی ہے۔
چونکہ k ایک کلیدی لفظ کی دلیل ہے، اس لیے مطلوبہ لفظ کی وضاحت کرنا ضروری ہے، جیسے k=3۔
import random
l = [0, 1, 2, 3, 4]
print(random.choices(l, k=3))
# [2, 1, 0]
print(random.choices(l, k=10))
# [3, 4, 1, 4, 4, 2, 0, 4, 2, 0]
k کی ڈیفالٹ ویلیو 1 ہے۔ اگر اسے چھوڑ دیا جائے تو، 1 عنصر والی فہرست واپس آ جاتی ہے۔
print(random.choices(l))
# [1]
دلیل کے وزن کا استعمال وزن (امکان) کی وضاحت کے لیے کیا جا سکتا ہے کہ ہر ایک عنصر کو منتخب کیا جائے گا، اور فہرست میں عناصر کی قسم int یا فلوٹ ہو سکتی ہے۔
print(random.choices(l, k=3, weights=[1, 1, 1, 10, 1]))
# [0, 2, 3]
print(random.choices(l, k=3, weights=[1, 1, 0, 0, 0]))
# [0, 1, 1]
دلیل کم_وزن کو مجموعی وزن کے طور پر بھی بیان کیا جا سکتا ہے۔ درج ذیل نمونہ کوڈ میں کم_وزن اوپر کے پہلے وزن کے برابر ہے۔
print(random.choices(l, k=3, cum_weights=[1, 2, 3, 13, 14]))
# [3, 2, 3]
آرگیومینٹس وزن اور کم_ویٹ دونوں کے لیے ڈیفالٹ None ہے، جس کا مطلب ہے کہ ہر عنصر کو ایک ہی امکان کے ساتھ منتخب کیا گیا ہے۔
اگر دلیل کے وزن یا کم_وزن کی لمبائی (عناصر کی تعداد) اصل فہرست سے مختلف ہے تو ایک خرابی واقع ہوتی ہے۔
# print(random.choices(l, k=3, weights=[1, 1, 1, 10, 1, 1, 1]))
# ValueError: The number of weights does not match the population_
ایک ہی وقت میں وزن اور کم_وزن کی وضاحت کرنا بھی ایک غلطی ہے۔
# print(random.choices(l, k=3, weights=[1, 1, 1, 10, 1], cum_weights=[1, 2, 3, 13, 14]))
# TypeError: Cannot specify both weights and cumulative weights
ہم نے اب تک سیمپل کوڈ میں مثال کے طور پر پہلی دلیل کے طور پر ایک فہرست کو متعین کیا ہے، لیکن وہی ٹیپلز اور تاروں پر لاگو ہوتا ہے۔
بے ترتیب نمبر کے بیج کو درست کریں۔
رینڈم ماڈیول کے فنکشن سیڈ () کو صوابدیدی عدد دے کر، بے ترتیب نمبر کے بیج کو فکس کیا جا سکتا ہے اور بے ترتیب نمبر جنریٹر کو شروع کیا جا سکتا ہے۔
ایک ہی بیج کے ساتھ شروع کرنے کے بعد، عناصر کو ہمیشہ اسی طرح منتخب کیا جاتا ہے۔
random.seed(0)
print(random.choice(l))
# 3
random.seed(0)
print(random.choice(l))
# 3


