2010-10-22 15 views
5

मैंने सबसे पुराने तत्व को संरक्षित करते समय डुप्लिकेट को हटाने के लिए साइट पर समाधानों का एक गुच्छा देखा है। मैं विपरीत में दिलचस्पी रखता हूँ: जबकि नवीनतम तत्व संरक्षण डुप्लिकेट हटाने, उदाहरण के लिए:ऑर्डर को संरक्षित करते समय पाइथन सूची से डुप्लिकेट को हटाने और सबसे पुराने तत्व को हटाने के लिए सबसे प्रभावी तरीका

list = ['1234','2345','3456','1234'] 
list.append('1234') 
>>> ['1234','2345','3456','1234','1234'] 
list = unique(list) 
>>> ['2345','3456','1234'] 

यह कैसे काम की तरह कुछ होगा?

धन्यवाद।

+1

ठीक है, आप सूची को उल्टा कर सकता है, क्या अन्य उत्तर कहा करते हैं, और इसे फिर से रिवर्स। – JoshD

+1

'उल्टा()' के साथ सूची को उलट करने का प्रयास करें, फिर इसे कहीं और वर्णित करें और फिर इसे फिर से उलट दें। – eumiro

उत्तर

3

, आइटम (या कुंजी) आवश्यक है hashable होने के लिए दी गई सूची-पसंद में जगह काम करता है:

def inplace_unique_latest(L, key=None): 
    if key is None: 
    def key(x): 
     return x 
    seen = set() 
    n = iter(xrange(len(L) - 1, -2, -1)) 
    for x in xrange(len(L) - 1, -1, -1): 
    item = L[x] 
    k = key(item) 
    if k not in seen: 
     seen.add(k) 
     L[next(n)] = item 
    L[:next(n) + 1] = [] 
+1

मैं इसे गलत पढ़ रहा हूं, लेकिन सूची में पॉप-अप होने के बाद [x] 'गलत नहीं देखा जाएगा? आप गलत आइटम पॉप अप करना समाप्त कर देंगे क्योंकि सबकुछ बदल गया है? – bstpierre

+0

@bstpierre: अच्छा पकड़; तय की। –

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

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