পাইথনে random.shuffle
ফিরছেন কেন None
?
>>> x = ['foo','bar','black','sheep']
>>> from random import shuffle
>>> print shuffle(x)
None
পরিবর্তে পরিবর্তিত মানটি কীভাবে পাব None
?
পাইথনে random.shuffle
ফিরছেন কেন None
?
>>> x = ['foo','bar','black','sheep']
>>> from random import shuffle
>>> print shuffle(x)
None
পরিবর্তে পরিবর্তিত মানটি কীভাবে পাব None
?
উত্তর:
random.shuffle()
জায়গায়x
তালিকা পরিবর্তন করে ।
পাইথন এপিআই পদ্ধতিগুলি যা স্থানে কোনও কাঠামো None
পরিবর্তিত করে সাধারণত ফিরে আসে , পরিবর্তিত ডেটা কাঠামো নয়।
আপনি যদি বিদ্যমান বিদ্যমান তালিকার উপর ভিত্তি করে একটি নতুন এলোমেলোভাবে পরিবর্তনযোগ্য তালিকা তৈরি করতে চান, যেখানে বিদ্যমান তালিকাটি যথাযথভাবে রাখা হয়েছে, আপনি random.sample()
ইনপুটটির পুরো দৈর্ঘ্য সহ ব্যবহার করতে পারেন :
x = ['foo', 'bar', 'black', 'sheep']
random.sample(x, len(x))
এছাড়াও আপনি ব্যবহার করতে পারে sorted()
সঙ্গে random.random()
একটি বাছাই কী-এর জন্য:
shuffled = sorted(x, key=lambda k: random.random())
তবে এটি বাছাই (একটি O (NlogN) অপারেশন), যখন ইনপুট দৈর্ঘ্যের স্যাম্পলিংয়ে কেবল ও (এন) অপারেশনগুলি লাগে ( random.shuffle()
সঙ্কুচিত পুল থেকে এলোমেলো মানগুলি অদলবদল করা হয় একই প্রক্রিয়া) takes
ডেমো:
>>> import random
>>> x = ['foo', 'bar', 'black', 'sheep']
>>> random.sample(x, len(x))
['bar', 'sheep', 'black', 'foo']
>>> sorted(x, key=lambda k: random.random())
['sheep', 'foo', 'black', 'bar']
>>> x
['foo', 'bar', 'black', 'sheep']
key
ফাংশনটি কী সত্যই নিশ্চিত? কিছু দ্রুত বাছাই করা অ্যালগরিদমগুলি যদি তুলনাগুলি স্ব-সামঞ্জস্যপূর্ণ না হয় তবে তা পড়ে যায়। আমি এই কাজটি যেভাবেই দেখতে পাচ্ছি, বাস্তবায়নের উপর নির্ভর করে (সাজসজ্জা-সাজানো-আনকোরোট কেবলমাত্র key
প্রতিটি উপাদানের উপরে একবার প্রয়োগ করতে হবে তাই ভাল সংজ্ঞায়িত হবে)।
key
কলযোগ্য সাথে বাছাই করার সময় পাইথন সাজসজ্জা-সাজানো-আনকোটোর ব্যবহার করে । সুতরাং হ্যাঁ, এটি প্রতিটি গ্যারান্টী হিসাবে প্রতিটি মান তাদের র্যান্ডম কী ঠিক একবার দেওয়া হয়।
ডক্স অনুসারে :
সিকোয়েন্স এক্স জায়গায় পরিবর্তন করুন। Alচ্ছিক আর্গুমেন্ট এলোমেলোনা হল 0-আর্গুমেন্ট ফাংশন যা [0.0, 1.0) এ এলোমেলোভাবে ভাসমান ফিরিয়ে দেয়; ডিফল্টরূপে, এটি ফাংশনটি এলোমেলো ()।
>>> x = ['foo','bar','black','sheep']
>>> from random import shuffle
>>> shuffle(x)
>>> x
['bar', 'black', 'sheep', 'foo']
shuffle
তালিকায় স্থান পরিবর্তন করে। এটি দুর্দান্ত, কারণ যদি আপনার আর মূল তালিকাটির প্রয়োজন না হয় তবে একটি বৃহত তালিকা অনুলিপি করা খাঁটি ওভারহেড হবে।
মতে "স্পষ্ট অন্তর্নিহিত বেশী ভালো" নীতিকে pythonic শৈলী তালিকা ফেরার, একটি খারাপ ধারণা হবে কারণ তারপর এক মনে হতে পারে এটা, হয় একটি নতুন এক যদিও এটি আসলে নয়।
আপনি যদি না একটি তাজা তালিকা, আপনি ভালো কিছু লিখতে হবে
new_x = list(x) # make a copy
random.shuffle(new_x)
যা সুন্দরভাবে স্পষ্ট। আপনার যদি এই আইডিয়ামটি ঘন ঘন প্রয়োজন হয় তবে এটি কোনও ফাংশনে আবদ্ধ করুন shuffled
(দেখুন sorted
) যা ফিরে আসে new_x
।
আমি এই মত এই ধারণাটি নিয়ে আমার আহা মুহুর্তটি পেয়েছিলাম:
from random import shuffle
x = ['foo','black','sheep'] #original list
y = list(x) # an independent copy of the original
for i in range(5):
print shuffle(y) # shuffles the original "in place" prints "None" return
print x,y #prints original, and shuffled independent copy
>>>
None
['foo', 'black', 'sheep'] ['foo', 'black', 'sheep']
None
['foo', 'black', 'sheep'] ['black', 'foo', 'sheep']
None
['foo', 'black', 'sheep'] ['sheep', 'black', 'foo']
None
['foo', 'black', 'sheep'] ['black', 'foo', 'sheep']
None
['foo', 'black', 'sheep'] ['sheep', 'black', 'foo']
পাইথন এপিআইগুলি যা কাঠামোগত স্থানে পরিবর্তিত হয় সেগুলি আউটপুট হিসাবে আর দেয় না ।
list = [1,2,3,4,5,6,7,8]
print(list)
আউটপুট: [1, 2, 3, 4, 5, 6, 7, 8]
from random import shuffle
print(shuffle(list))
আউটপুট: কিছুই নয়
from random import sample
print(sample(list, len(list)))
আউটপুট: [7, 3, 2, 4, 5, 6, 1, 8]
random.sample()
অন্যের ব্যাখ্যা অনুসারে আপনি বদলানো তালিকাটি ফিরে আসতে পারেন । এটি প্রতিস্থাপন ছাড়াই তালিকা থেকে কে উপাদানগুলিকে নমুনা দিয়ে কাজ করে । সুতরাং আপনার তালিকায় যদি সদৃশ উপাদান থাকে তবে তাদের অনন্য ব্যবহার করা হবে।
>>> l = [1,4,5,3,5]
>>> random.sample(l,len(l))
[4, 5, 5, 3, 1]
>>> random.sample(l,len(l)-1)
[4, 1, 5, 3]
>>> random.sample(l,len(l)-1)
[3, 5, 5, 1]