आप कुछ इस तरह कर रही द्वारा numpy का उपयोग कर ऐसा कर सकता है, mergsort स्थिर है तो यह आप के प्रथम या अंतिम घटना बाहर लेने दूँगा प्रत्येक मूल्य:,
def unique(array):
uniq, index = np.unique(array, return_index=True)
return uniq[index.argsort()]
लेकिन:
def unique(array, orderby='first'):
array = np.asarray(array)
order = array.argsort(kind='mergesort')
array = array[order]
diff = array[1:] != array[:-1]
if orderby == 'first':
diff = np.concatenate([[True], diff])
elif orderby == 'last':
diff = np.concatenate([diff, [True]])
else:
raise ValueError
uniq = array[diff]
index = order[diff]
return uniq[index.argsort()]
इस उत्तर बहुत के समान है numpy.unique आंतरिक रूप से एक अस्थिर प्रकार का उपयोग करता है ताकि आपको कोई विशिष्ट इंडेक्स, यानी पहले या आखिरी बार प्राप्त करने की गारंटी न हो।
मुझे लगता है कि एक आदेश दिया dict भी काम कर सकते हैं:
def unique(array):
uniq = OrderedDict()
for i in array:
uniq[i] = 1
return uniq.keys()
स्रोत
2012-10-17 04:13:44
हमेशा डॉक्स से जोड़ने के लिए उपयोगी: [numpy.unique] (https://docs.scipy.org/doc/numpy-1.13.0/ संदर्भ/जेनरेट/numpy.unique.html) – BoltzmannBrain
हां यह अद्वितीय सूचकांक प्राप्त करता है, लेकिन सॉर्टिंग आवश्यक है? क्रमबद्ध करने के लिए पुनरावृत्तियों को समान वस्तुओं के लिए सरणी के माध्यम से खोजना ही होता है, इसलिए समय जटिलता से बचा नहीं जा सकता है। लेकिन numpy.unique एक नई सरणी वस्तु देता है। हम इस अंतरिक्ष जटिलता से बचने में सक्षम होना चाहिए। – BoltzmannBrain