তাই আমি দ্রুততম উপায় পেতে কিছু গতির তুলনা করেছি। তালিকা বোধগম্যতা খুব দ্রুত। কাছাকাছি যাওয়ার একমাত্র উপায় হ'ল তালিকাগুলির নির্মাণকালে বাইটকোডকে নিরস্ত করা থেকে বিরত রাখা। আমার প্রথম প্রচেষ্টাটি নিম্নলিখিত পদ্ধতি ছিল যা নীতিগতভাবে দ্রুত হবে বলে মনে হয়:
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)))
তবে এটি স্টারম্যাপ কলের চেয়ে ধীর ছিল।
উপসংহার: গতি পাগল জন্য: তালিকা বোধগম্যতা ব্যবহার করবেন না। আপনার যদি করতে হয় তবে কেবলমাত্র কল করুন call বিল্টিন ব্যবহার করুন।
d = [[] for x in xrange(0,n)]। আপনাকে হয় পাইথনে স্পষ্টভাবে লুপ করতে হবে বা বার বার পাইথন ফাংশন / ল্যাম্বদা কল করতে হবে (যা ধীরে ধীরে হওয়া উচিত)। তবে এখনও আশা করি কেউ এমন কিছু পোস্ট করবেন যা দেখায় যে আমি ভুল :)