दिलचस्प पोस्ट
std :: vector reserve () और push_back () आकार बदलने () और सरणी सूचकांक की तुलना में तेज़ है, क्यों? मैं MATLAB में जीयूआई कैसे प्रोग्राम कर सकता हूं? लिनक्स में सी / सी ++ का इस्तेमाल करते हुए मशीन सीरियल नंबर और सीपीयू आईडी प्राप्त करना लंबी और छोटी कमांड लाइन विकल्प प्राप्त करने के लिए bash shell स्क्रिप्ट में कूच का उपयोग करना सरणी से नैन मान निकालना एक एमएस-एसक्यूएल डाटाबेस के अंदर किसी भी तालिका के किसी भी कॉलम में एक मान की खोज कैसे करें? एएसपी.नेट और वेब टूल्स 2015 (आरसी 1 अपडेट 1) के स्थापित होने के बाद विजुअल स्टूडियो 2015 त्रुटि "ऑब्जेक्ट रेफ़रलेंस ऑब्जेक्ट के एक उदाहरण के लिए सेट नहीं है" जावा त्रुटि: तुलना विधि अपने सामान्य अनुबंध का उल्लंघन करती है नोडजेएस में मोंगो डेटाबेस में सम्मिलित दस्तावेज के _id प्राप्त करें SQL सर्वर: कैसे information_schema से विदेशी कुंजी संदर्भ प्राप्त करें? Xcode IOS प्रोजेक्ट केवल "मैक 64-बिट" दिखाता है, लेकिन सिम्युलेटर या डिवाइस नहीं एंड्रॉइड में एसिंक्टस्क बनाम थ्रेड क्या html तत्व में एकाधिक आईडी हो सकते हैं? इकाई फ़्रेमवर्क 4 इकाई संग्रह से वस्तु हटाएं मोंगोडीबी: एकत्रीकरण ढांचे: फ़ील्ड के बीच $ मैच

वस्तुओं की एक सूची को फेरबदल करना

मेरे पास पायथन में वस्तुओं की एक सूची है और मैं उन्हें घसीटना चाहता हूं। मैंने सोचा कि मैं random.shufflerandom.shuffle विधि का उपयोग कर सकता हूं, लेकिन यह तब विफल हो रहा है जब सूची वस्तुओं का है क्या वस्तु के फेरबदल या इसके चारों ओर एक और रास्ता है?

 import random class a: foo = "bar" a1 = a() a2 = a() b = [a1,a2] print random.shuffle(b) 

यह विफल हो जाएगा

Solutions Collecting From Web of "वस्तुओं की एक सूची को फेरबदल करना"

random.shuffle को काम करना चाहिए यहां एक उदाहरण दिया गया है, जहां वस्तुओं की सूची है:

 from random import shuffle x = [[i] for i in range(10)] shuffle(x) # print x gives [[9], [2], [7], [0], [4], [5], [3], [1], [8], [6]] # of course your results will vary 

ध्यान दें कि घसीटना जगह पर काम करती है , और कोई भी नहीं लौटाता है

जैसा कि आप में जगह बदमाश सीखा था समस्या थी। मुझे अक्सर समस्या आती है, और अक्सर यह भूल जाते हैं कि सूची की प्रतिलिपि कैसे करें, भी। sample(a, len(a)) का उपयोग करना sample(a, len(a)) हल है, len(a) का उपयोग करके len(a) नमूना आकार के रूप में पायथन दस्तावेज़ के लिए https://docs.python.org/3.6/library/random.html#random.sample देखें।

यहां random.sample() का उपयोग करते हुए एक सरल संस्करण है। random.sample() जो random.sample() परिणाम को एक नई सूची के रूप में देता है

 import random a = range(5) b = random.sample(a, len(a)) print a, b, "two list same:", a == b # print: [0, 1, 2, 3, 4] [2, 1, 3, 4, 0] two list same: False # The function sample allows no duplicates. # Result can be smaller but not larger than the input. a = range(555) b = random.sample(a, len(a)) print "no duplicates:", a == list(set(b)) try: random.sample(a, len(a) + 1) except ValueError as e: print "Nope!", e # print: no duplicates: True # print: Nope! sample larger than population 
 #!/usr/bin/python3 import random s=list(range(5)) random.shuffle(s) # << shuffle before print or assignment print(s) # print: [2, 4, 1, 3, 0] 

यह भी मुझे पाने के लिए कुछ समय लगा, लेकिन फेरबदल का दस्तावेज बहुत स्पष्ट है:

स्थान में घसीटना सूची x; वापसी कोई नहीं

इसलिए आपको print random.shuffle(b) नहीं करना चाहिए। print random.shuffle(b) लेकिन random.shuffle(b) और print b तुलना में print b

 >>> import random >>> a = ['hi','world','cat','dog'] >>> random.shuffle(a,random.random) >>> a ['hi', 'cat', 'dog', 'world'] 

यह मेरे लिए ठीक काम करता है। यादृच्छिक विधि सेट करने के लिए सुनिश्चित करें

यदि आप पहले से ही numpy का प्रयोग कर रहे हैं (वैज्ञानिक और वित्तीय अनुप्रयोगों के लिए बहुत लोकप्रिय) आप अपने आप को एक आयात बचा सकते हैं

 import numpy as np np.random.shuffle(b) print(b) 

http://docs.scipy.org/doc/numpy/reference/generated/numpy.random.shuffle.html

'प्रिंट फंक' (फू) '' फू 'के साथ कॉल किए जाने पर' फेंक 'का रिटर्न वेल्यू प्रिंट करेगा। 'फेरबदल' हालांकि इसके रिटर्न प्रकार के रूप में कोई नहीं है, क्योंकि सूची को जगह में संशोधित किया जाएगा, इसलिए यह कुछ नहीं छापती है। युक्ति:

 # shuffle the list in place random.shuffle(b) # print it print(b) 

यदि आप कार्यात्मक प्रोग्रामिंग शैली में अधिक हैं, तो आप निम्न आवरण समारोह को बना सकते हैं:

 def myshuffle(ls): random.shuffle(ls) return ls 
 from random import random my_list = range(10) shuffled_list = sorted(my_list, key=lambda x: random()) 

यह विकल्प कुछ अनुप्रयोगों के लिए उपयोगी हो सकता है, जहां आप ऑर्डरिंग फ़ंक्शन को स्वैप करना चाहते हैं।

किसी को shuffled नामक फ़ंक्शन को परिभाषित किया जा सकता है ( sort के समान अर्थ में)

 def shuffled(x): import random y = x[:] random.shuffle(y) return y x = shuffled([1, 2, 3, 4]) print x 

कुछ मामलों में जब numpy arrays का उपयोग करते हुए, random.shuffle का उपयोग करके सरणी में डुप्लिकेट डेटा बनाया जाता है।

एक विकल्प का उपयोग करने के लिए numpy.random.shuffle । यदि आप पहले से ही numpy के साथ काम कर रहे हैं, तो यह सामान्य random.shuffle पर सबसे पसंदीदा तरीका random.shuffle

numpy.random.shuffle

उदाहरण

 >>> import numpy as np >>> import random 

random.shuffle का उपयोग करना:

 >>> foo = np.array([[1,2,3],[4,5,6],[7,8,9]]) >>> foo array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) >>> random.shuffle(foo) >>> foo array([[1, 2, 3], [1, 2, 3], [4, 5, 6]]) 

numpy.random.shuffle का उपयोग करना:

 >>> foo = np.array([[1,2,3],[4,5,6],[7,8,9]]) >>> foo array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) >>> np.random.shuffle(foo) >>> foo array([[1, 2, 3], [7, 8, 9], [4, 5, 6]]) 

यदि आपके पास कई सूचियां हैं, तो आप क्रमचय को परिभाषित करना चाहें (जिस तरह से आप सूची को फेरबदल / सूची में आइटम पुनर्व्यवस्थित करें) पहले और फिर उसे सभी सूचियों पर लागू करें:

 import random perm = list(range(len(list_one))) random.shuffle(perm) list_one = [list_one[index] for index in perm] list_two = [list_two[index] for index in perm] 

भोड़ी / सस्पली

यदि आपकी सूचियां संकीर्ण एरेज़ हैं, तो यह सरल है:

 import numpy as np perm = np.random.permutation(len(list_one)) list_one = list_one[perm] list_two = list_two[perm] 
 def shuffle(_list): if not _list == []: import random list2 = [] while _list != []: card = random.choice(_list) _list.remove(card) list2.append(card) while list2 != []: card1 = list2[0] list2.remove(card1) _list.append(card1) return _list 

सुनिश्चित करें कि आप अपनी स्रोत फ़ाइल को नामित नहीं कर रहे हैं random.py, और यह कि आपके काम की निर्देशिका में कोई फ़ाइल नहीं है जिसे यादृच्छिक रूप से कहा जाता है .. या तो आपके प्रोग्राम को अजगर यादृच्छिक मॉड्यूल के बजाय अपनी स्थानीय random.py फ़ाइल को आयात करने और आयात करने का कारण बन सकता है ।

आप इसके लिए जा सकते हैं:

 >>> A = ['r','a','n','d','o','m'] >>> B = [1,2,3,4,5,6] >>> import random >>> random.sample(A+B, len(A+B)) [3, 'r', 4, 'n', 6, 5, 'm', 2, 1, 'a', 'o', 'd'] 

अगर आप दो सूचियों पर वापस जाना चाहते हैं, तो आप इस लंबी सूची को दो में विभाजित करते हैं।

आप उस फ़ंक्शन का निर्माण कर सकते हैं जो एक पैरामीटर के रूप में एक सूची लेता है और सूची का फेरबदल संस्करण लौटाता है:

 from random import * def listshuffler(inputlist): for i in range(len(inputlist)): swap = randint(0,len(inputlist)-1) temp = inputlist[swap] inputlist[swap] = inputlist[i] inputlist[i] = temp return inputlist 

फेरबदल की प्रक्रिया "प्रतिस्थापन के साथ" है , इसलिए प्रत्येक वस्तु की घटना बदल सकती है! कम से कम जब जब आपकी सूची में आइटम भी सूचीबद्ध हों

उदाहरण के लिए,

 ml = [[0], [1]] * 10 

बाद,

 random.shuffle(ml) 

[0] की संख्या 9 या 8 हो सकती है, लेकिन वास्तव में 10 नहीं है

योजना: भारी भार उठाने के लिए लाइब्रेरी पर भरोसा किए बिना फेरबदल को लिखें उदाहरण: तत्व 0 से शुरू होने वाली शुरुआत से सूची में जाएं; इसके लिए एक नयी यादृच्छिक स्थिति ढूंढिए, 6 कहते हैं, 0 का मान 6 में और 6 के मान को 0 में रखिए। तत्व 1 पर ले जाएं और इस प्रक्रिया को दोहराएं, और बाकी की सूची के माध्यम से

 import random iteration = random.randint(2, 100) temp_var = 0 while iteration > 0: for i in range(1, len(my_list)): # have to use range with len() for j in range(1, len(my_list) - i): # Using temp_var as my place holder so I don't lose values temp_var = my_list[i] my_list[i] = my_list[j] my_list[j] = temp_var iteration -= 1 

यह बढ़िया काम करता है। मैं सूची ऑब्जेक्ट के रूप में फ़ंक्शन के साथ यहां कोशिश कर रहा हूं:

  from random import shuffle def foo1(): print "foo1", def foo2(): print "foo2", def foo3(): print "foo3", A=[foo1,foo2,foo3] for x in A: x() print "\r" shuffle(A) for y in A: y() 

यह प्रिंट करता है: foo1 foo2 foo3 foo2 foo3 foo1 (अंतिम पंक्ति में फ़्यूज़ एक यादृच्छिक क्रम है)