जब मैं पायथन 3.8.0 सूची को एक सेट में परिवर्तित करता हूं, तो परिणामी सेट ऑर्डर * गैर-तुच्छ तरीके से अत्यधिक संरचित होता है। इस संरचना को छद्म यादृच्छिक सूची से कैसे निकाला जा रहा है?
एक प्रयोग के भाग के रूप में, मैं एक यादृच्छिक सेट उत्पन्न कर रहा हूँ। मुझे यह देखकर आश्चर्य हुआ कि सेट पर साजिश रचने से अचानक सेट में अप्रत्याशित रैखिक संरचना दिखाई दी। इसलिए मुझे हैरान करने वाली दो बातें हैं - एक सेट रिजल्ट में कंवर्ट करने का एक ऑर्डर क्यों होता है * जो इस संरचना को उजागर करता है; और, कुछ हद तक छद्म यादृच्छिक सेट में यह "छिपी" संरचना क्यों है?
कोड:
X = [randrange(250) for i in range(30)]
print(X)
print(set(X))
उदाहरण के लिए, जो आउटपुट देता है
[238, 202, 245, 94, 111, 106, 148, 164, 154, 113, 128, 10, 196, 141, 69, 38, 106, 8, 40, 53, 160, 87, 85, 13, 38, 147, 204, 50, 162, 91]
{128, 8, 10, 141, 13, 147, 148, 154, 160, 162, 164, 38, 40, 50, 53, 196, 69, 202, 204, 85, 87, 91, 94, 106, 238, 111, 113, 245}
उपरोक्त सूची का एक प्लॉट ** अपेक्षा के अनुसार काफी यादृच्छिक लगता है:
सेट की साजिश रचते समय (जैसा कि इसे आउटपुट में आदेश दिया गया है) सेट में मौजूद संरचना को प्रदर्शित करता है:
यह व्यवहार मेरी मशीन पर 100% सुसंगत है (नीचे दिए गए और अधिक उदाहरण) 250 और 30 के मान के साथ उपरोक्त कोड में उपयोग किया गया उदाहरण (मैंने जिस उदाहरण का उपयोग किया है वह चेरी नहीं है - यह सिर्फ पिछले एक भाग है)। इन मूल्यों को ट्यूनिंग कभी-कभी थोड़ा अलग संरचना में होता है (उदाहरण के लिए दो के बजाय तीन अंकगणितीय प्रगति *** का एक सबसेट)।
क्या यह अन्य लोगों की मशीनों पर प्रजनन योग्य है? बेशक, इस तरह की संरचना मौजूद है, एक गैर-महान छद्म यादृच्छिक संख्या पीढ़ी का संकेत है, लेकिन यह स्पष्ट नहीं करता है कि किसी सेट में परिवर्तित करना इस संरचना को कुछ अर्थों में 'अर्क' कैसे करेगा। जहां तक मुझे जानकारी है, कोई औपचारिक गारंटी नहीं है कि सेट का ऑर्डर (जब एक सूची से परिवर्तित किया गया हो) नियतात्मक है (और भले ही यह हो, पृष्ठभूमि में कोई परिष्कृत ऑर्डर नहीं किया जा रहा है)। तो यह कैसे हो रहा है ?!
(*): मुझे पता है, सेट अनियंत्रित संग्रह हैं, लेकिन मेरा मतलब है "आदेश" इस अर्थ में कि, printस्टेटमेंट को कॉल करते समय , सेट कुछ क्रम में आउटपुट होता है जो लगातार अंतर्निहित सेट संरचना को उजागर करता है।
(**): ये भूखंड वोल्फ्राम अल्फा के हैं। दो और उदाहरण नीचे दिए गए हैं:
(***): 250 से 500 तक यादृच्छिक संख्याओं की सीमा को बदलते समय दो भूखंड:




