यह एक वैचारिक प्रश्न है, लेकिन मुझे उम्मीद थी कि मुझे इस पर कुछ अच्छी सलाह मिल सकती है। मेरे द्वारा की जाने वाली बहुत सी प्रोग्रामिंग ( NumPy ) सरणियों के साथ है; मुझे अक्सर दो या अधिक सरणियों में आइटम का मिलान करना पड़ता है जो अलग-अलग आकार के होते हैं और पहली चीज जो मैं जाता हूं वह है एक लूप या इससे भी बदतर, एक नेस्टेड-लूप। मैं यथासंभव लूप से बचना चाहता हूं, क्योंकि वे धीमे (कम से कम पायथन में) हैं।
मुझे पता है कि NumPy के साथ बहुत सी चीजों के लिए पूर्व-निर्धारित कमांड हैं जिन्हें मुझे बस शोध करने की आवश्यकता है, लेकिन क्या आपको (अधिक अनुभवी प्रोग्रामर के रूप में) एक सामान्य विचार प्रक्रिया है जो किसी चीज़ को पुनरावृत्त करने के लिए आपके दिमाग में आती है?
इसलिए मेरे पास अक्सर ऐसा कुछ होता है, जो भयानक होता है और मैं इससे बचना चाहता हूं:
small_array = np.array(["one", "two"])
big_array = np.array(["one", "two", "three", "one"])
for i in range(len(small_array)):
for p in range(len(big_array)):
if small_array[i] == big_array[p]:
print "This item is matched: ", small_array[i]
मुझे पता है कि विशेष रूप से इसे प्राप्त करने के लिए कई अलग-अलग तरीके हैं, लेकिन मुझे लगता है कि यह मौजूद है, तो सामान्य तरीके से सोचने में दिलचस्पी है।
I want to avoid for-loops as much as possible because they are slow (at least in Python).
लगता है कि आप यहाँ गलत समस्या को हल कर रहे हैं। यदि आपको किसी चीज़ पर पुनरावृति करने की आवश्यकता है, तो आपको किसी चीज़ पर पुनरावृति करने की आवश्यकता है; आप इसी तरह का प्रदर्शन करेंगे, जिससे कोई फर्क नहीं पड़ता कि आप किस पायथन का उपयोग करते हैं। यदि आपका कोड धीमा है, तो यह नहीं है क्योंकि आपके पास for
लूप हैं; यह इसलिए है क्योंकि आप अनावश्यक काम कर रहे हैं या पायथन साइड पर काम कर रहे हैं जो सी साइड पर किया जा सकता है। अपने उदाहरण में आप अतिरिक्त काम कर रहे हैं; आप इसे दो के बजाय एक लूप के साथ कर सकते हैं।