दिलचस्प पोस्ट
html एक समूह में केवल एक चेकबॉक्स का चयन करें जावा। तार की तुलना करते समय एक्सेंट को अनदेखा करें जावास्क्रिप्ट के साथ एचएच-एमएम-एसएसएस के लिए सेकंड कन्वर्ट? स्विंग वर्कर और जेपीप्रदर्शन बियर के साथ समस्याएं SQL के साथ चलने वाले काउंटर में मैं एक "अंतर" कैसे प्राप्त करूं? फायरबेज उपयोगकर्ता टेबल पर अतिरिक्त विवरण जोड़ें क्या मैं HTML5 के उपयोग से <<inside> एक <बटन> तत्व घोंसला कर सकता हूं? क्या एक यूआरएल को एक जगह रखने की इजाजत है? JQuery के साथ ट्रिगर कीपेज बैक-एंड डेटा-स्ट्रक्चर के साथ सिंक्रनाइज़ करने के लिए JTable डिज़ाइन नोडजेएस के अंडे का उपयोग "अज्ञात विकल्प -" और "" त्रुटियों का कारण बनता है विंडोज पर ऊंचा विशेषाधिकार के साथ अजगर स्क्रिप्ट कैसे चलाना EntityManager को उचित उपयोग समझने में संघर्ष जावा में पाइप (|) ऑपरेटर नेटवर्क सिस्टम तक पहुंचने के लिए FileSystemWatcher विफल रहता है

पायथन में एक "उलट" सूची बनाने का सर्वोत्तम तरीका?

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

यहाँ एक समाधान है जो मेरे साथ हुआ है:

new_list = list(reversed(old_list)) 

old_list डुप्लिकेट करना भी संभव है, फिर डुप्लिकेट को जगह में बदल दें:

 new_list = list(old_list) # or `new_list = old_list[:]` new_list.reverse() 

क्या मेरे पास अनदेखा एक बेहतर विकल्प है? यदि नहीं, तो क्या अन्य के ऊपर दिए गए तरीकों में से एक का उपयोग करने के लिए एक आकर्षक कारण (जैसे दक्षता) है?

वेब के समाधान से एकत्रित समाधान "पायथन में एक "उलट" सूची बनाने का सर्वोत्तम तरीका?"

 newlist = oldlist[::-1] 

[::-1] टुकड़े टुकड़े करना (जो मेरी पत्नी अन्ना को "मार्टिन स्माइली" कॉल करना पसंद करती है 😉 का अर्थ है: पूरे अनुक्रम को टुकड़े करना, -1 के एक चरण के साथ, अर्थात, रिवर्स में। यह सभी दृश्यों के लिए काम करता है

ध्यान दें कि यह ( और आपके द्वारा उल्लिखित विकल्प) "उथले प्रति" के समतुल्य है, यानी: यदि आइटम अस्थिर हैं और आप उनपर म्यूटेटर कहते हैं, तो मूल सूची में रखे गए वस्तुओं के उत्परिवर्तन भी आइटम में हैं उलट सूची, और इसके विपरीत यदि आपको उस से बचने की जरूरत है, तो एक copy.deepcopy (हमेशा संभावित महंगा ऑपरेशन करते समय), इस मामले में एक। .reverse द्वारा पीछा किया, एकमात्र अच्छा विकल्प है।

अब समय समय पर चलें संकेत: एलेक्स [::-1] सबसे तेज़ है 🙂

 $ p -m timeit "ol = [1, 2, 3]; nl = list(reversed(ol))" 100000 loops, best of 3: 2.34 usec per loop $ p -m timeit "ol = [1, 2, 3]; nl = list(ol); nl.reverse();" 1000000 loops, best of 3: 0.686 usec per loop $ p -m timeit "ol = [1, 2, 3]; nl = ol[::-1];" 1000000 loops, best of 3: 0.569 usec per loop $ p -m timeit "ol = [1, 2, 3]; nl = [i for i in reversed(ol)];" 1000000 loops, best of 3: 1.48 usec per loop $ p -m timeit "ol = [1, 2, 3]*1000; nl = list(reversed(ol))" 10000 loops, best of 3: 44.7 usec per loop $ p -m timeit "ol = [1, 2, 3]*1000; nl = list(ol); nl.reverse();" 10000 loops, best of 3: 27.2 usec per loop $ p -m timeit "ol = [1, 2, 3]*1000; nl = ol[::-1];" 10000 loops, best of 3: 24.3 usec per loop $ p -m timeit "ol = [1, 2, 3]*1000; nl = [i for i in reversed(ol)];" 10000 loops, best of 3: 155 usec per loop 

अद्यतन: निरीक्षक G4dget ने सुझाव दिया सूची कंप विधि जोड़ा गया। मैं परिणाम स्वयं के लिए बात करूंगा

समायोजन

यह sdolan द्वारा टाइमिट गणना के लिए एक बेसलाइन बेंचमार्क / समायोजन प्रदान करने के लायक है जो अक्सर अनावश्यक सूची () रूपांतरण के बिना 'उलट' के प्रदर्शन को दर्शाता है यह सूची () ऑपरेशन रनटाइम में एक अतिरिक्त 26 usecs जोड़ती है और केवल एक इटरेटर अस्वीकार्य होने की स्थिति में आवश्यक है

परिणाम:

 reversed(lst) -- 11.2 uses lst[::-1] --23.6 secs 

गणना:

 # I ran this set of 100000 and came up with 11.2, twice: python -m timeit "ol = [1, 2, 3]*1000; nl = reversed(ol)" 100000 loops, best of 3: 11.2 usec per loop python -m timeit "ol = [1, 2, 3]*1000; nl = reversed(ol)" 100000 loops, best of 3: 11.2 usec per loop # This shows the overhead of list() python -m timeit "ol = [1, 2, 3]*1000; nl = list(reversed(ol))" 10000 loops, best of 3: 37.1 usec per loop # This is the result for reverse via -1 step slices python -m timeit "ol = [1, 2, 3]*1000;nl = ol[::-1]" 10000 loops, best of 3: 23.6 usec per loop 

निष्कर्ष:

इन परीक्षणों के निष्कर्ष को उलट दिया गया है () टुकड़ा से भी तेज है [:: – 1] 12.4 उपयोगकों द्वारा