طباعة عناصر List بشكل عشوائي مع تحديد النسبة في Python Random List
تتيح لنا لغة Python التعامل مع العناصر بشكل عشوائي باستخدام مكتبة random، ولكن في بعض الحالات لا نريد أن تكون جميع العناصر متساوية في احتمالية الظهور.
فقد نحتاج إلى إعطاء عنصر معين فرصة أكبر للظهور من باقي العناصر، وهذا ما يمكن تنفيذه بسهولة باستخدام الدالة random.choices() ومعامل weights.
في هذا المقال سنتعرف على كيفية طباعة عناصر List بشكل عشوائي في Python Random List مع تحديد نسبة ظهور عنصر أكبر من عنصر آخر، وسنتعرف على الفرق بين random.choice() وrandom.choices() وكيفية استخدام الأوزان للتحكم في الاحتمالات.
ما هي مكتبة random في Python Random List؟
تحتوي Python على مكتبة تسمى random توفر مجموعة من الدوال التي تساعد على إنشاء قيم واختيارات عشوائية.
يمكن استدعاء المكتبة باستخدام:
import randomوتستخدم المكتبة في العديد من التطبيقات مثل الألعاب، والمحاكاة، واختيار العناصر بشكل عشوائي، وإنشاء نتائج تعتمد على الاحتمالات.
طباعة عنصر عشوائي من List باستخدام random.choice()
إذا كنت تريد اختيار عنصر واحد بشكل عشوائي من قائمة، يمكنك استخدام الدالة random.choice().
import random
mylist = ["apple", "banana", "cherry"]
print(random.choice(mylist))في كل مرة يتم فيها تشغيل الكود سيتم اختيار عنصر واحد من القائمة بشكل عشوائي.
وقد تكون النتيجة مثل:
bananaأو:
appleأو:
cherryفي هذه الحالة تكون فرصة اختيار كل عنصر متساوية.
استخدام random.choices() لاختيار عدة عناصر
إذا كنت تريد اختيار أكثر من عنصر بشكل عشوائي، فيمكنك استخدام random.choices() بدلًا من random.choice().
import random
mylist = ["apple", "banana", "cherry"]
print(random.choices(mylist, k=8))يحدد المتغير k عدد العناصر التي سيتم اختيارها.
في المثال السابق:
k=8يعني أن Python ستقوم بعملية اختيار عشوائي 8 مرات، وقد يتكرر نفس العنصر أكثر من مرة.
كيف تتحكم في نسبة ظهور عنصر عن الآخر؟
هنا تظهر أهمية معامل weights، والذي يسمح لنا بتحديد وزن لكل عنصر داخل القائمة.
يمكن كتابة الكود بالشكل التالي:
import random
mylist = ["apple", "banana", "cherry"]
print(random.choices(
mylist,
weights=[5, 10, 5],
k=8
))في هذا المثال قمنا بتحديد ثلاثة أوزان، لأن لدينا ثلاثة عناصر داخل القائمة.
- apple لديه وزن 5.
- banana لديه وزن 10.
- cherry لديه وزن 5.
وبالتالي فإن banana لديه فرصة أكبر للظهور مقارنة بـ apple وcherry.
كيف تعمل weights داخل random.choices()؟
الأرقام الموجودة داخل weights لا تعتبر نسبًا مئوية مباشرة، وإنما تعتبر أوزانًا نسبية تحدد فرصة اختيار كل عنصر.
في المثال:
weights=[5, 10, 5]مجموع الأوزان يساوي:
5 + 10 + 5 = 20وبالتالي تصبح الاحتمالات التقريبية:
- apple = 5 / 20 = 25%
- banana = 10 / 20 = 50%
- cherry = 5 / 20 = 25%
وهذا يعني أن banana لديه ضعف فرصة ظهور كل عنصر من العنصرين الآخرين.
مثال آخر للتحكم في الاحتمالات
يمكنك تغيير الأوزان حسب النتيجة التي تريد الوصول إليها.
مثلًا إذا أردنا أن يكون لدينا عنصر لديه فرصة ظهور أكبر بشكل واضح:
import random
mylist = ["apple", "banana", "cherry"]
result = random.choices(
mylist,
weights=[1, 8, 1],
k=10
)
print(result)في هذه الحالة سيكون مجموع الأوزان:
1 + 8 + 1 = 10وبالتالي تكون الاحتمالات:
- apple = 10%
- banana = 80%
- cherry = 10%
وهذا يجعل banana أكثر ظهورًا من باقي العناصر بشكل واضح.
ما الفرق بين random.choice() و random.choices()؟
هناك فرق مهم بين الدالتين، ويمكن تلخيصه بالشكل التالي:
- random.choice() تختار عنصرًا واحدًا بشكل عشوائي.
- random.choices() تستطيع اختيار عدة عناصر.
- random.choices() تسمح باستخدام weights للتحكم في احتمالية ظهور العناصر.
- يمكن تحديد عدد الاختيارات باستخدام k.
فإذا كنت تحتاج إلى اختيار عنصر واحد فقط:
random.choice(mylist)أما إذا كنت تحتاج إلى عدة اختيارات مع إمكانية تحديد احتمالية كل عنصر:
random.choices(mylist, weights=[5, 10, 5], k=8)هل يمكن تكرار نفس العنصر؟
نعم، تسمح random.choices() بتكرار العناصر، ولذلك قد تحصل على نتيجة مثل:
['banana', 'apple', 'banana', 'banana', 'cherry', 'banana', 'apple', 'banana']وهذا مناسب في الحالات التي تريد فيها إجراء عدة اختيارات مستقلة من نفس القائمة.
استخدام Python Random List في التطبيقات
يمكن استخدام فكرة الاختيار العشوائي الموزون في العديد من التطبيقات والمشاريع البرمجية.
- اختيار عناصر من قائمة باحتمالات مختلفة.
- أنظمة الألعاب واختيار الجوائز.
- محاكاة الأحداث والاحتمالات.
- أنظمة التوصيات البسيطة.
- اختيار منتجات أو عناصر بشكل عشوائي.
- إنشاء بيانات وتجارب تعتمد على الاحتمالات.
فعلى سبيل المثال، في إحدى الألعاب يمكن إعطاء جائزة نادرة وزنًا منخفضًا، بينما تحصل الجوائز العادية على وزن أكبر.
نقطة مهمة عند استخدام weights
يجب أن يكون عدد الأوزان مساويًا لعدد العناصر الموجودة في القائمة.
فإذا كانت القائمة تحتوي على ثلاثة عناصر:
mylist = ["apple", "banana", "cherry"]فيجب أن تحتوي weights على ثلاثة أوزان أيضًا:
weights=[5, 10, 5]لأن كل وزن مرتبط بالعنصر الموجود في نفس الموضع داخل القائمة.
الخلاصة
توفر Python طريقة بسيطة للتحكم في الاختيارات العشوائية من خلال مكتبة random، ويمكن استخدام random.choices() عندما نحتاج إلى اختيار عدة عناصر من قائمة مع إمكانية تحديد فرصة ظهور كل عنصر.
ومن خلال استخدام weights يمكنك إعطاء عنصر فرصة أكبر للظهور من عنصر آخر، دون الحاجة إلى كتابة خوارزميات معقدة للتحكم في الاحتمالات.
وتعتبر هذه الطريقة مفيدة في العديد من التطبيقات مثل الألعاب والمحاكاة وأنظمة التوصيات والبرامج التي تعتمد على الاختيار العشوائي الموزون.
مزيد من المقالات : استخدام in_app_update في Flutter لتحديث التطبيق من الداخل وتحسين تجربة المستخدم
شرح مكتبة Safe Image لفلترة الصور الحساسة بالذكاء الاصطناعي






