2013-09-05 4 views
11
>>> a= ('one', 'a') 
>>> b = ('two', 'b') 
>>> c = ('three', 'a') 
>>> l = [a, b, c] 
>>> l 
[('one', 'a'), ('two', 'b'), ('three', 'a')] 

सूची से अनोखा tuples जाओ, मैं कैसे एक अनूठा दूसरी प्रविष्टि (स्तंभ? मद?) के साथ इस सूची में से सिर्फ तत्वों के लिए जाँच कर सकते हैं, और उसके बाद सूची पर पाया पहली प्रविष्टि हड़पने। वांछित आउटपुटअजगर

>>> l 
[('one', 'a'), ('two', 'b')] 
+0

एल आउटपुट पर उदाहरण पर ('तीन', 'सी') ('तीन', 'ए') में बदलें। – clopez

उत्तर

15

एक सेट का उपयोग करें (अगर दूसरे मद हैश में सक्षम है) है:

>>> lis = [('one', 'a'), ('two', 'b'), ('three', 'a')] 
>>> seen = set() 
>>> [item for item in lis if item[1] not in seen and not seen.add(item[1])] 
[('one', 'a'), ('two', 'b')] 

ऊपर कोड के बराबर है:

>>> seen = set() 
>>> ans = [] 
for item in lis: 
    if item[1] not in seen: 
     ans.append(item) 
     seen.add(item[1]) 
...   
>>> ans 
[('one', 'a'), ('two', 'b')] 
+2

मैं अंततः इस सूची की समझ को समझता हूं। "देखा.add()" कोड हमेशा कोई नहीं देता है, इसलिए कह रहा है "और नहीं ... हमेशा कोई नहीं" सभी को जांचने की शर्त नहीं है, सूची समझ में कमांड को छीनने का एक तरीका है। – appleLover

2

तो आदेश नहीं है महत्वपूर्ण, आप एक शब्दकोश का उपयोग कर सकते हैं:

d = {} 

for t in reversed(l): 
    d[t[1]] = t 

print d.values() 

या अधिक संक्षेप में:

{t[1]: t for t in reversed(l)}.values() 

आप सूची रिवर्स नहीं है, तो ('three', 'a')('one', 'a') ऊपर लिख देगा।