পাইথনের তালিকা থেকে এলোমেলোভাবে উপাদান নির্বাচন করার জন্য পছন্দ, নমুনা এবং পছন্দ।

ব্যবসায়

পাইথন স্ট্যান্ডার্ড লাইব্রেরির র্যান্ডম মডিউলের ফাংশন পছন্দ(), স্যাম্পল(), এবং চয়েস() তালিকা, টিপল, স্ট্রিং বা অন্যান্য সিকোয়েন্স অবজেক্ট (এলোমেলো স্যাম্পলিং) থেকে এলোমেলোভাবে উপাদান নির্বাচন এবং পুনরুদ্ধার করতে ব্যবহার করা যেতে পারে।

পছন্দ() একটি একক উপাদান পায়, নমুনা() এবং পছন্দ() একাধিক উপাদানের একটি তালিকা পায়। স্যাম্পল() হল অ-পুনরুদ্ধারযোগ্য নিষ্কাশন যার কোন ডুপ্লিকেট নেই, চয়েস() হল ডুপ্লিকেট সহ পুনরুদ্ধারযোগ্য নিষ্কাশন।

নিম্নলিখিত তথ্য এখানে প্রদান করা হয়.

  • এলোমেলোভাবে একটি উপাদান নির্বাচন করুন.:random.choice()
  • এলোমেলোভাবে একাধিক উপাদান নির্বাচন করুন (কোন নকল নেই):random.sample()
  • এলোমেলোভাবে একাধিক উপাদান নির্বাচন করুন (সদৃশ সহ):random.choices()
  • র্যান্ডম সংখ্যা বীজ ঠিক করুন

এলোমেলোভাবে একটি উপাদান নির্বাচন করুন.:random.choice()

এলোমেলো মডিউলের ফাংশন চয়ন(), একটি উপাদান এলোমেলোভাবে তালিকা থেকে নির্বাচন করা হয় এবং পুনরুদ্ধার করা যেতে পারে।

import random

l = [0, 1, 2, 3, 4]

print(random.choice(l))
# 1

একই tuples এবং স্ট্রিং প্রযোজ্য. স্ট্রিং এর ক্ষেত্রে, একটি একক অক্ষর নির্বাচন করা হয়।

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 বা স্ট্রিং এ ফিরে যেতে চান, 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() পাইথন 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 বা float হতে পারে।

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]

আর্গুমেন্ট cum_weights একটি ক্রমবর্ধমান ওজন হিসাবেও নির্দিষ্ট করা যেতে পারে। নিচের নমুনা কোডের কম_ওজন উপরের প্রথম ওজনের সমতুল্য।

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

আমরা এখন পর্যন্ত নমুনা কোডের উদাহরণ হিসাবে প্রথম যুক্তি হিসাবে একটি তালিকা নির্দিষ্ট করেছি, তবে একই টিপল এবং স্ট্রিংগুলিতে প্রযোজ্য।

র্যান্ডম সংখ্যা বীজ ঠিক করুন

র্যান্ডম মডিউলের ফাংশন seed() কে একটি নির্বিচারে পূর্ণসংখ্যা দেওয়ার মাধ্যমে, এলোমেলো সংখ্যার বীজ স্থির করা যেতে পারে এবং র্যান্ডম সংখ্যা জেনারেটর শুরু করা যেতে পারে।

একই বীজ দিয়ে শুরু করার পরে, উপাদানগুলি সবসময় একইভাবে নির্বাচন করা হয়।

random.seed(0)
print(random.choice(l))
# 3

random.seed(0)
print(random.choice(l))
# 3