2010-09-16 22 views
23

मैं उत्सुक क्या इस तरह के डेटा वस्तुओं uniquefying के effient तरीका होगा हूँ:पायथन: सूचियों की सूची के लिए विशिष्टता

testdata =[ ['9034968', 'ETH'], ['14160113', 'ETH'], ['9034968', 'ETH'], ['11111', 'NOT'], ['9555269', 'NOT'], ['15724032', 'ETH'], ['15481740', 'ETH'], ['15481757', 'ETH'], ['15481724', 'ETH'], ['10307528', 'ETH'], ['15481757', 'ETH'], ['15481724', 'ETH'], ['15481740', 'ETH'], ['15379365', 'ETH'], ['11111', 'NOT'], ['9555269', 'NOT'], ['15379365', 'ETH'] 
] 

प्रत्येक डेटा जोड़ी के लिए, छोड़ दिया सांख्यिक स्ट्रिंग प्लस सही पर प्रकार की विशिष्टता बताता है एक डेटा तत्व। और यह testdata के समान सूचियों की एक सूची देता है, लेकिन केवल उन्माद मौजूद हैं।

सादर

उत्तर

51

आप एक सेट का उपयोग कर सकते हैं:

unique_data = [list(x) for x in set(tuple(x) for x in testdata)] 

तुम भी this page जो तरीकों है कि या तो बनाए रखने या क्रम बनाए रखने के नहीं है की एक किस्म के मानक देख सकते हैं।

+0

ध्यान दें कि आप इस विधि के साथ आदेश खो देते हैं। यदि यह आपके से प्रासंगिक है तो इसे मैन्युअल रूप से आइटम्स के बाद सॉर्ट करना होगा या हटा देना होगा। – Wolph

+1

मुझे एक त्रुटि मिल रही है: 'TypeError: unhashable type:' list''। पायथन 2.6.2, उबंटू जौन्टी। –

+0

@ हेल्लनर: उसने अभी एक टुपल का उपयोग करने के लिए कोड अपडेट किया है, अब आपको अब यह समस्या नहीं मिलेगी :) – Wolph

5

मैंने @ मार्क के जवाब की कोशिश की और एक त्रुटि मिली। सूची को परिवर्तित करना और प्रत्येक तत्व को टुपल में बदलना यह काम करता है। यकीन नहीं है कि यह सबसे अच्छा तरीका है हालांकि।

list(map(list, set(map(lambda i: tuple(i), testdata)))) 

बेशक वही चीज़ सूची सूची का उपयोग करके व्यक्त की जा सकती है।

[list(i) for i in set(tuple(i) for i in testdata)] 

मैं पायथन 2.6.2 का उपयोग कर रहा हूं।

अद्यतन

@Mark के बाद से अपने जवाब बदल गया है। उनका वर्तमान उत्तर tuples का उपयोग करता है और काम करेगा। तो होगा मेरा :)

अद्यतन 2

@Mark के लिए धन्यवाद। मैंने tuples की सूची के बजाय सूचियों की एक सूची वापस करने के लिए अपना जवाब बदल दिया है।

+0

@ मार्क: किया गया। धन्यवाद! –

+0

यहां एक छोटी सी चाल है: 'lambda x: foo (x)' के बजाय आप केवल 'foo' लिख सकते हैं। –

+0

@ मार्क: जहां 'foo' एक कॉल करने योग्य है। पकड़ लिया। –

1
import sets 
testdata =[ ['9034968', 'ETH'], ['14160113', 'ETH'], ['9034968', 'ETH'], ['11111', 'NOT'], ['9555269', 'NOT'], ['15724032', 'ETH'], ['15481740', 'ETH'], ['15481757', 'ETH'], ['15481724', 'ETH'], ['10307528', 'ETH'], ['15481757', 'ETH'], ['15481724', 'ETH'], ['15481740', 'ETH'], ['15379365', 'ETH'], ['11111', 'NOT'], ['9555269', 'NOT'], ['15379365', 'ETH']] 
conacatData = [x[0] + x[1] for x in testdata] 
print conacatData 
uniqueSet = sets.Set(conacatData) 
uniqueList = [ [t[0:-3], t[-3:]] for t in uniqueSet] 
print uniqueList 
+0

अन्य उत्तरों कूलर हैं! – pyfunc

+2

इसके अलावा, सेट मॉड्यूल को बहिष्कृत किया गया है, इसके बजाय बिल्टिन सेट-प्रकार का उपयोग करें। –

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