इसलिए मैंने सबसे तेज़ रास्ता पाने के लिए कुछ गति तुलना की। सूची की समझ वास्तव में बहुत तेज है। पास होने का एकमात्र तरीका सूची के निर्माण के दौरान बाइटकोड से बाहर निकलने से बचने के लिए है। मेरा पहला प्रयास निम्नलिखित विधि थी, जो सिद्धांत रूप में तेज प्रतीत होगी:
l = [[]]
for _ in range(n): l.extend(map(list,l))
(लंबाई 2 ** एन की एक सूची का उत्पादन करता है, निश्चित रूप से) यह निर्माण सूची की समझ से दोगुना है, समय के अनुसार, दोनों छोटी और लंबी (एक मिलियन) सूची के लिए।
मेरा दूसरा प्रयास मेरे लिए सूची निर्माणकर्ता को बुलाने के लिए स्टार्मैप का उपयोग करना था, एक निर्माण है, जो शीर्ष गति पर सूची निर्माणकर्ता को चलाने के लिए प्रतीत होता है, लेकिन अभी भी धीमी है, लेकिन केवल एक छोटी राशि से:
from itertools import starmap
l = list(starmap(list,[()]*(1<<n)))
दिलचस्प है कि निष्पादन का समय बताता है कि यह अंतिम सूची कॉल है जो स्टैरमैप समाधान को धीमा बनाता है, क्योंकि इसका निष्पादन समय लगभग गति के बराबर है:
l = list([] for _ in range(1<<n))
मेरा तीसरा प्रयास तब आया जब मुझे पता चला कि सूची (()) भी एक सूची तैयार करती है, इसलिए मैंने सरलता से कोशिश की:
l = list(map(list, [()]*(1<<n)))
लेकिन यह स्टार्मैप कॉल की तुलना में धीमा था।
निष्कर्ष: गति उन्माद के लिए: सूची समझ का उपयोग करें। केवल कॉल फ़ंक्शन, यदि आपको करना है। बिल्डिंस का इस्तेमाल करें।
d = [[] for x in xrange(0,n)]। आपको या तो पाइथन में स्पष्ट रूप से लूप करना होगा या पाइथन फ़ंक्शन / लैम्डा को बार-बार कॉल करना चाहिए (जो धीमा होना चाहिए)। लेकिन फिर भी उम्मीद है कि कोई व्यक्ति कुछ ऐसा पोस्ट करेगा जो दिखाता है कि मैं गलत हूं :)।