সমাধান করার জন্য আমারও একই সমস্যা ছিল তাই আমি এই প্রশ্নটি জুড়ে এসেছি। আমি অ্যান্ড্রু ক্লার্ক এবং নারায়ণের উত্তরটির একটি পারফরম্যান্স তুলনা করেছি যা আমি ভাগ করতে চাই।
দুটি উত্তরের মধ্যে প্রাথমিক পার্থক্য হ'ল কীভাবে তারা অভ্যন্তরীণ তালিকাগুলির মাধ্যমে পুনরাবৃত্তি করে। এর মধ্যে একটি অন্তর্নির্মিত মানচিত্র ব্যবহার করে, অন্যটি তালিকার বোধগম্যতা ব্যবহার করছে। যদি ল্যাম্বডাস ব্যবহারের প্রয়োজন না হয় তবে মানচিত্রের সমতুল্য তালিকা বোধগম্যতার সামান্য পারফরম্যান্স সুবিধা রয়েছে । সুতরাং এই প্রশ্নের প্রসঙ্গে map
তালিকা বোধের চেয়ে কিছুটা ভাল সম্পাদন করা উচিত।
এটি আসলে সত্য কিনা তা দেখার জন্য একটি পারফরম্যান্স বেঞ্চমার্ক করি। এই সমস্ত পরীক্ষার জন্য আমি পাইথন সংস্করণ 3.5.0 ব্যবহার করেছি। পরীক্ষার প্রথম সেটটিতে আমি তালিকা অনুসারে উপাদানগুলিকে 10 হতে এবং 10-100,000 থেকে তালিকার সংখ্যা পরিবর্তিত করতে চাই
>>> python -m timeit "[list(map(float,k)) for k in [list(range(0,10))]*10]"
>>> 100000 loops, best of 3: 15.2 usec per loop
>>> python -m timeit "[[float(y) for y in x] for x in [list(range(0,10))]*10]"
>>> 10000 loops, best of 3: 19.6 usec per loop
>>> python -m timeit "[list(map(float,k)) for k in [list(range(0,10))]*100]"
>>> 100000 loops, best of 3: 15.2 usec per loop
>>> python -m timeit "[[float(y) for y in x] for x in [list(range(0,10))]*100]"
>>> 10000 loops, best of 3: 19.6 usec per loop
>>> python -m timeit "[list(map(float,k)) for k in [list(range(0,10))]*1000]"
>>> 1000 loops, best of 3: 1.43 msec per loop
>>> python -m timeit "[[float(y) for y in x] for x in [list(range(0,10))]*1000]"
>>> 100 loops, best of 3: 1.91 msec per loop
>>> python -m timeit "[list(map(float,k)) for k in [list(range(0,10))]*10000]"
>>> 100 loops, best of 3: 13.6 msec per loop
>>> python -m timeit "[[float(y) for y in x] for x in [list(range(0,10))]*10000]"
>>> 10 loops, best of 3: 19.1 msec per loop
>>> python -m timeit "[list(map(float,k)) for k in [list(range(0,10))]*100000]"
>>> 10 loops, best of 3: 164 msec per loop
>>> python -m timeit "[[float(y) for y in x] for x in [list(range(0,10))]*100000]"
>>> 10 loops, best of 3: 216 msec per loop
পরের পরীক্ষার সেটগুলিতে আমি তালিকাগুলির তালিকাগুলির সংখ্যা 100 করে বাড়িয়ে দিতে চাই ।
>>> python -m timeit "[list(map(float,k)) for k in [list(range(0,100))]*10]"
>>> 10000 loops, best of 3: 110 usec per loop
>>> python -m timeit "[[float(y) for y in x] for x in [list(range(0,100))]*10]"
>>> 10000 loops, best of 3: 151 usec per loop
>>> python -m timeit "[list(map(float,k)) for k in [list(range(0,100))]*100]"
>>> 1000 loops, best of 3: 1.11 msec per loop
>>> python -m timeit "[[float(y) for y in x] for x in [list(range(0,100))]*100]"
>>> 1000 loops, best of 3: 1.5 msec per loop
>>> python -m timeit "[list(map(float,k)) for k in [list(range(0,100))]*1000]"
>>> 100 loops, best of 3: 11.2 msec per loop
>>> python -m timeit "[[float(y) for y in x] for x in [list(range(0,100))]*1000]"
>>> 100 loops, best of 3: 16.7 msec per loop
>>> python -m timeit "[list(map(float,k)) for k in [list(range(0,100))]*10000]"
>>> 10 loops, best of 3: 134 msec per loop
>>> python -m timeit "[[float(y) for y in x] for x in [list(range(0,100))]*10000]"
>>> 10 loops, best of 3: 171 msec per loop
>>> python -m timeit "[list(map(float,k)) for k in [list(range(0,100))]*100000]"
>>> 10 loops, best of 3: 1.32 sec per loop
>>> python -m timeit "[[float(y) for y in x] for x in [list(range(0,100))]*100000]"
>>> 10 loops, best of 3: 1.7 sec per loop
সাহসী পদক্ষেপ নিতে এবং তালিকার উপাদানগুলির সংখ্যা 1000 হতে সংশোধন করতে দেয়
>>> python -m timeit "[list(map(float,k)) for k in [list(range(0,1000))]*10]"
>>> 1000 loops, best of 3: 800 usec per loop
>>> python -m timeit "[[float(y) for y in x] for x in [list(range(0,1000))]*10]"
>>> 1000 loops, best of 3: 1.16 msec per loop
>>> python -m timeit "[list(map(float,k)) for k in [list(range(0,1000))]*100]"
>>> 100 loops, best of 3: 8.26 msec per loop
>>> python -m timeit "[[float(y) for y in x] for x in [list(range(0,1000))]*100]"
>>> 100 loops, best of 3: 11.7 msec per loop
>>> python -m timeit "[list(map(float,k)) for k in [list(range(0,1000))]*1000]"
>>> 10 loops, best of 3: 83.8 msec per loop
>>> python -m timeit "[[float(y) for y in x] for x in [list(range(0,1000))]*1000]"
>>> 10 loops, best of 3: 118 msec per loop
>>> python -m timeit "[list(map(float,k)) for k in [list(range(0,1000))]*10000]"
>>> 10 loops, best of 3: 868 msec per loop
>>> python -m timeit "[[float(y) for y in x] for x in [list(range(0,1000))]*10000]"
>>> 10 loops, best of 3: 1.23 sec per loop
>>> python -m timeit "[list(map(float,k)) for k in [list(range(0,1000))]*100000]"
>>> 10 loops, best of 3: 9.2 sec per loop
>>> python -m timeit "[[float(y) for y in x] for x in [list(range(0,1000))]*100000]"
>>> 10 loops, best of 3: 12.7 sec per loop
এই পরীক্ষা থেকে আমরা উপসংহারে পৌঁছাতে পারি যে map
এই ক্ষেত্রে তালিকা বোঝার চেয়ে একটি কার্যকারিতা উপকার রয়েছে। আপনি int
বা অন্যটিতে কাস্ট করার চেষ্টা করছেন তবে এটি প্রযোজ্য str
। প্রতি লিস্টে কম উপাদান সহ ছোট সংখ্যক তালিকার জন্য, পার্থক্য নগণ্য। প্রতি তালিকায় আরও বেশি উপাদান সহ বৃহত তালিকার map
জন্য তালিকার বোধগম্যতার পরিবর্তে কেউ ব্যবহার করতে পছন্দ করতে পারে তবে এটি অ্যাপ্লিকেশন প্রয়োজনীয়তার উপর সম্পূর্ণ নির্ভর করে।
তবে আমি ব্যক্তিগতভাবে তালিকার সংজ্ঞাটি এর চেয়ে বেশি পঠনযোগ্য এবং মূ .় বলে মনে করি map
। এটি পাইথনের একটি ডি-ফ্যাক্টো স্ট্যান্ডার্ড। সাধারণত লোকেরা তালিকার বোধগম্যতার চেয়ে বেশি দক্ষ এবং আরামদায়ক (বিশেষত শিক্ষানবিশ) map
।