दिलचस्प पोस्ट
दूसरे वेबसाइट पर रेल में नियंत्रक से डाक डेटा जमा करना ब्रॉडकास्ट रिसीवर के भीतर से अलर्ट डाइलॉग ?? क्या यह किया जा सकता है? यह कैसे पता चलेगा कि क्या उपवर्ग एक रनटाइम पर क्लास का एक उदाहरण है? PHP स्क्रिप्ट के निष्पादन समय को मापने का सटीक तरीका Xcode 6 में ऑटोलायआउट बाधाओं का उपयोग करते हुए पहलू-फिट व्यवहार का अनुकरण करना संग्रहीत कार्यविधि परिणाम सेट के लिए स्तंभ परिभाषा को पुनर्प्राप्त करें कच्चे एसक्यूएल उदाहरण रेल करता है मैं C ++ में एक यादृच्छिक अल्फा-न्यूमेरिक स्ट्रिंग कैसे बनाऊं? पारदर्शी अलर्टडायलोग का काली पृष्ठभूमि है फ़्लोटिंग पॉइंट / गोलाई त्रुटि का एक सरल उदाहरण क्या है? एंड्रॉइड: एंड्रॉइड एप्लिकेशन में रूट एक्सेस कैसे हासिल करें? Viewpager में वर्तमान टुकड़ा उदाहरण प्राप्त करना JVM के ढेर का आकार कैसे बढ़ाएं एंड्रॉइड: क्या वीडियो थंबनेल प्रदर्शित करना संभव है? कैसे XP / Vista और नए पर VB6 के लिए एक सरल स्थापना प्रणाली बनाने के लिए?

पूरी तरह से सॉर्ट नहीं किया जा रहा है जो एक सूची में मान के सबसे निकट एक वस्तु का सूचकांक खोजना

एक उदाहरण के रूप में मेरी सूची है:

[25.75443, 26.7803, 25.79099, 24.17642, 24.3526, 22.79056, 20.84866, 19.49222, 18.38086, 18.0358, 16.57819, 15.71255, 14.79059, 13.64154, 13.09409, 12.18347, 11.33447, 10.32184, 9.544922, 8.813385, 8.181152, 6.983734, 6.048035, 5.505096, 4.65799] 

और मैं 11.5 सबसे निकटतम मूल्य के सूचकांक की तलाश कर रहा हूं। मैंने अन्य तरीकों जैसे कि द्विआधारी खोज और bisect_left लेकिन वे काम नहीं करते हैं

मैं इस सरणी को सॉर्ट नहीं कर सकता, क्योंकि उस इंडेक्स के मान को लाने के लिए मान का इंडेक्स एक समान सरणी पर इस्तेमाल किया जाएगा।

वेब के समाधान से एकत्रित समाधान "पूरी तरह से सॉर्ट नहीं किया जा रहा है जो एक सूची में मान के सबसे निकट एक वस्तु का सूचकांक खोजना"

निम्न प्रयास करें:

 min(range(len(a)), key=lambda i: abs(a[i]-11.5)) 

उदाहरण के लिए:

 >>> a = [25.75443, 26.7803, 25.79099, 24.17642, 24.3526, 22.79056, 20.84866, 19.49222, 18.38086, 18.0358, 16.57819, 15.71255, 14.79059, 13.64154, 13.09409, 12.18347, 11.33447, 10.32184, 9.544922, 8.813385, 8.181152, 6.983734, 6.048035, 5.505096, 4.65799] >>> min(range(len(a)), key=lambda i: abs(a[i]-11.5)) 16 

या सूचकांक और मूल्य प्राप्त करने के लिए:

 >>> min(enumerate(a), key=lambda x: abs(x[1]-11.5)) (16, 11.33447) 

कैसे के बारे में: आप दो सूचियों को ज़िप, तो परिणाम की तरह?

यदि आप सरणी को सॉर्ट नहीं कर सकते हैं, तो निकटतम आइटम ढूंढने का कोई त्वरित तरीका नहीं है – आपको सभी प्रविष्टियों पर पुनरावृत्त करना होगा।

एक वैकल्पिक हल है, लेकिन यह काफी काम है: एक तरह से एल्गोरिथ्म लिखें जो सरणी को क्रमबद्ध करता है और (एक ही समय में) एक दूसरे सरणी को अद्यतन करता है जो आपको बताता है कि यह एंट्री कहाँ थी,

इस तरह, आप निकटतम प्रविष्टि की अनुक्रमणिका देखने के लिए द्विआधारी खोज का उपयोग कर सकते हैं और फिर "इंडेक्स एरे" का उपयोग करके मूल अनुक्रमणिका को देखने के लिए इस सूचकांक का उपयोग करें।

[संपादित करें] zip() का उपयोग करना zip() , यह हासिल करना बहुत आसान है:

  array_to_sort = zip( original_array, range(len(original_array)) ) array_to_sort.sort( key=i:i[0] ) 

अब आप मूल्य के लिए द्विआधारी खोज ( item[0] का उपयोग कर सकते हैं) item[1] आपको मूल अनुक्रमणिका देगा।

गर्त में जा रहे सभी आइटम केवल रैखिक हैं यदि आप सरणी को सॉर्ट करना चाहते हैं जो खराब हो

मैं अतिरिक्त deltax (अब तक का अंतर) और deltax (उस तत्व का सूचकांक) रखते हुए एक समस्या और न केवल सूची में एक बार पाश को deltax

ध्यान रखें कि यदि स्थान महत्वपूर्ण नहीं है तो आप सॉर्ट किए गए इंडेक्स की द्वितीयक सूची बनाकर सामग्री को बिना किसी सूची को सॉर्ट कर सकते हैं।

यह भी ध्यान में रखें कि यदि आप यह एक बार देख रहे हैं, तो आपको केवल ओ (एन) सूची में हर तत्व का पता लगाना होगा। (यदि कई बार आप संभवतया बाद में दक्षता बढ़ाने के लिए सॉर्ट करना चाहते हैं)

 import numpy as np a = [25.75443, 26.7803, 25.79099, 24.17642, 24.3526, 22.79056, 20.84866, 19.49222, 18.38086, 18.0358, 16.57819, 15.71255, 14.79059, 13.64154, 13.09409, 12.18347, 11.33447, 10.32184, 9.544922, 8.813385, 8.181152, 6.983734, 6.048035, 5.505096, 4.65799] index = np.argmin(np.abs(np.array(a)-11.5)) a[index] # here is your result 

यदि कोई पहले से ही एक सरणी है, तो इसी रूपांतरण को खत्म कर दिया जा सकता है।