2009-05-12 11 views
10

क्या पाइथन लाइब्रेरी में शायद फॉर-लूप के साथ संख्याओं की एक सूची को सारांशित करने का कोई तरीका है? या यह वास्तव में केवल बहु-थ्रेडिंग/वेक्टर प्रसंस्करण कुछ कुशलता से कर सकता है?फॉर-लूप की तुलना में संख्याओं की सूची को समेटने का तेज़ तरीका?

संपादित करें: बस स्पष्ट करने के लिए, यह किसी भी संख्या, अनुरक्षित, उपयोगकर्ता से इनपुट की एक सूची हो सकती है।

+1

तुम सच में, "तेजी" का मतलब है या आप "pythonic" मतलब है? संख्याओं की एक सूची को वास्तव में आपके कोड में बाधा उत्पन्न करना है जिसे अनुकूलित करने की आवश्यकता है? –

उत्तर

32

आप सरणी के मानों को योग करने के लिए sum() का उपयोग कर सकते हैं।

a = [1,9,12] 
print sum(a) 
2

सूची में प्रत्येक शब्द बस 1 से वृद्धि कर देता है, या आप श्रृंखला में एक पैटर्न मिल सकता है, आप n पदों संक्षेप के लिए एक सूत्र मिल सकता है। उदाहरण के लिए, श्रृंखला का योग {1,2,3, ..., n} = n (एन + 1)/2

और पढ़ें here

1

ठीक है, मैं नहीं जानता कि अगर यह तेज़ है लेकिन आप इसे एक ऑपरेशन करने के लिए थोड़ा कैलकुंस आज़मा सकते हैं। (एन * (एन + 1))/2 आपको प्रत्येक संख्या का योग 1 से एन तक देता है, और अधिक जटिल रकम को हल करने के लिए अन्य सूत्र भी हैं।

0

एक सामान्य सूची के लिए, आपको कम से कम एक बार राशि प्राप्त करने के लिए प्रत्येक सदस्य को कम से कम एक बार जाना होगा, जो कि लूप के लिए बिल्कुल सही है। लाइब्रेरी एपीआई (जैसे योग) का उपयोग करना अधिक सुविधाजनक है, लेकिन मुझे संदेह है कि यह वास्तव में तेज़ होगा।

+0

sum() लूप के लिए तेज़ होगा क्योंकि यह सी –

+0

@musicfreak में लिखा गया है: बिल्कुल नहीं, यह तेज़ होगा क्योंकि यह लूप (चर असाइनमेंट और विधि कॉल) के ओवरहेड से बचाता है – Algorias

+0

ऐसा इसलिए है क्योंकि यह है सी में लिखा ... किसी भी तरह से यह तेजी से है। –

5

फिर भी एक और तरीका पाश समय के साथ एक सूची योग करने के लिए:

s = reduce(lambda x, y: x + y, l) 
+9

आपको लैम्ब्डा के बजाय ऑपरेटर.एड का उपयोग करना चाहिए। पहले 100000 नंबरों को सम्मिलित करना लैम्ब्डा के साथ 34 मिमी है लेकिन ऑपरेटर.एड के साथ केवल 1 9 एमएमएस है। (योग 15 एमएमएस दोनों से बेहतर है)। – Kiv

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