2016-03-27 2 views
5

मैं पायथन में सूची से डुप्लीकेट हटाने के लिए एक फ़ंक्शन लिखने का प्रयास कर रहा था।किसी सूची को सेट करने के दौरान सेट का आदेश क्यों दिया जाता है?

लेकिन जब मैंने ऐसा किया, तो मैंने पाया कि सूची को इसे सेट में और वापस सूची में परिवर्तित करके क्रमबद्ध किया गया था।

>>> l = [9,10,10,11,1,1,1,22,2,2,2] 
>>> s = set(l) 
>>> s 
set([1, 2, 9, 10, 11, 22]) 
>>> l2 = list(s) 
>>> l2 
[1, 2, 9, 10, 11, 22] 
>>> l2 = list(set(l)) 
>>> l2 
[1, 2, 9, 10, 11, 22] 
>>> 

सेट s आदेश दिया है (जब यह मुद्रण कम से कम आदेश दिया):

यहाँ स्क्रिप्ट है।

सेट का आदेश क्यों दिया जाता है?

और समय जटिलता क्या है अगर मैं इस चलाकर डुप्लिकेट निकालने: list(set(data)) दृष्टिकोण के लिए

def remove_duplicates(nums): 
    return list(set(nums)) 
+0

संक्षेप में: 'set' वस्तुओं मनमाने ढंग से आदेश दिया जाता है। – TigerhawkT3

+2

@ टाइगरहॉक 3 कृपया बंद करने में इतनी आक्रामक मत बनो। केवल मनमानी सेट ऑर्डरिंग से सवाल के लिए और भी कुछ है। –

+0

'set_l = [x के लिए (i, x) गणना में (एल) यदि l.index (x) == i]' –

उत्तर

6

चलने का समय हे (एन) है।

सेट को पूर्णांक के ढांचे के आर्टिफैक्ट के रूप में आदेश दिया गया है। अन्य इनपुट के साथ, डेटा सॉर्ट किए गए क्रम से दूर हो जाएगा।

मनमाना आदेश पर काबू पाने के लिए, यह मुहावरा जो भी हे (एन) है का उपयोग करें: list(collections.OrderedDict.fromkeys(data))

+1

गोचा! तुम सही हो। और जब मैंने इसे बहुत बड़ी संख्या के साथ परीक्षण किया, तो लौटाई गई सूची का आदेश नहीं दिया गया था। आपका बहुत बहुत धन्यवाद। – xhanshawn

+0

आपका नया दृष्टिकोण ओ (एन लॉग एन) है ना? –

+0

@ टिमोथी शील्ड्स यह नहीं है। तुलना की संख्या ओ (एन) है। उपकरण के माध्यम से सत्यापित करना आसान है। –

संबंधित मुद्दे