পুনরাবৃত্তির বনাম স্পেস , ব্যবহারের একটি বিষয় হতে পারে। বিভিন্ন পরিস্থিতিতে প্রোফাইলিং হয় "দ্রুত" এবং / অথবা "কম স্মৃতি" নিবিড় হতে পারে।
# first
>>> L = [0, 23, 234, 89, None, 0, 35, 9, ...]
>>> [x for x in L if x is not None]
[0, 23, 234, 89, 0, 35, 9, ...]
# second
>>> L = [0, 23, 234, 89, None, 0, 35, 9]
>>> for i in range(L.count(None)): L.remove(None)
[0, 23, 234, 89, 0, 35, 9, ...]
দ্য প্রথম পদ্ধতির (যেমন এছাড়াও দ্বারা প্রস্তাবিত @jamylak , @Raymond Hettinger , এবং @Dipto ), মেমরি সদৃশ তালিকা যা কয়েক সঙ্গে একটি বৃহৎ তালিকার জন্য ব্যয়বহুল হতে পারে সৃষ্টি None
এন্ট্রি।
দ্বিতীয় পদ্ধতির তালিকা মাধ্যমে একবার যায়, এবং তারপর আবার একটি না হওয়া পর্যন্ত প্রতিটি সময় None
উপনিত। এটি কম মেমরি নিবিড় হতে পারে, এবং তালিকাটি যতই যায় ততই ছোট হবে। তালিকার আকার হ্রাসের None
ফলে সামনের প্রচুর প্রবেশের গতি বাড়তে পারে তবে প্রচুর None
এন্ট্রি পিছনে থাকলে সবচেয়ে খারাপ পরিস্থিতি ঘটত।
সমান্তরালকরণ এবং স্থানস্থ কৌশলগুলি অন্যান্য পদ্ধতি, তবে পাইথনের প্রত্যেকটির নিজস্ব জটিলতা রয়েছে। ডেটা এবং রানটাইম ব্যবহারের ক্ষেত্রেগুলি জানা এবং সেইসাথে প্রোগ্রামটি প্রোফাইল করা যেখানে নিবিড় ক্রিয়াকলাপ বা বড় ডেটা শুরু করা যায়।
উভয় পদ্ধতির নির্বাচন করা সম্ভবত সাধারণ পরিস্থিতিতে গুরুত্বপূর্ণ হবে না। এটি স্বরলিপিটির বেশি পছন্দ হয়ে ওঠে। আসলে, এই অস্বাভাবিক পরিস্থিতিতে, numpy
বা cython
পাইথন অপ্টিমাইজেশানকে মাইক্রোম্যানেজ করার চেষ্টা করার পরিবর্তে উপযুক্ত বিকল্প হতে পারে।
filter
সংস্করণ:filter(lambda x: x is not None, L)
- আপনিlambda
ব্যবহার থেকে মুক্তি পেতে পারেনpartial
এবংoperator.is_not
আমি মনে করি, তবে তালিকা-কম এত বেশি পরিচ্ছন্ন হওয়ার কারণে এটি সম্ভবত এটির পক্ষে উপযুক্ত নয়।