পাইথনে নতুন খালি তালিকা তৈরি করার সর্বোত্তম উপায় কী?
l = []
অথবা
l = list()
আমি দুটি কারণে এই জিজ্ঞাসা করছি:
- প্রযুক্তিগত কারণে, যা হিসাবে দ্রুত। (ক্লাস তৈরি করা ওভারহেডের কারণ হয়?)
- কোড পাঠযোগ্যতা - কোনটি স্ট্যান্ডার্ড কনভেনশন।
পাইথনে নতুন খালি তালিকা তৈরি করার সর্বোত্তম উপায় কী?
l = []
অথবা
l = list()
আমি দুটি কারণে এই জিজ্ঞাসা করছি:
উত্তর:
কোডের কোন অংশটি দ্রুত তা আপনি এখানে পরীক্ষা করতে পারেন:
% python -mtimeit "l=[]"
10000000 loops, best of 3: 0.0711 usec per loop
% python -mtimeit "l=list()"
1000000 loops, best of 3: 0.297 usec per loop
যাইহোক, অনুশীলনে, এই সূচনাটি সম্ভবত আপনার প্রোগ্রামের একটি খুব ছোট অংশ, সুতরাং এটি সম্পর্কে চিন্তা করা সম্ভবত ভুল-মাথা।
পঠনযোগ্যতা খুব বিষয়গত। আমি পছন্দ করি []
তবে অ্যালেক্স মার্তেলির মতো খুব জ্ঞাত কিছু মানুষ পছন্দ করেন list()
কারণ এটি উচ্চারণযোগ্য ।
list('')
দিতে []
পরিবর্তে ['']
?
list('abcd')
এবং আপনি সমস্ত কিছু বুঝতে পারেন)
list()
অন্তর্নিহিত তুলনায় ধীর গতির []
, কারণ
এখানে সিম্বল লুক রয়েছে (অজগরটির আগে থেকে কোনও উপায় জানার উপায় নেই যদি আপনি কেবল অন্য কিছু হিসাবে তালিকাটিকে পুনরায় সংজ্ঞায়িত না করেন!),
ফাংশন প্রার্থনা আছে,
তারপরে এটি পরীক্ষা করতে হবে যে পুনরাবৃত্তিযোগ্য আর্গুমেন্ট পাস হয়েছে কিনা (যাতে এটি এর উপাদানগুলির সাথে তালিকা তৈরি করতে পারে) PS। আমাদের ক্ষেত্রে কিছুই নেই তবে "যদি" চেক আছে
বেশিরভাগ ক্ষেত্রে গতির পার্থক্য যদিও কোনও ব্যবহারিক পার্থক্য করে না।
list()
চেয়ে ধীর কেন তা বুঝতে পেরে ভাল লাগছে []
!
list()
কেবল কোনও তর্ক ছিল কিনা তা পরীক্ষা করে দেখতে হবে ... "পুনরাবৃত্তিযোগ্য কিনা তা পরীক্ষা করুন" এবং "উপাদানগুলির সাথে তালিকা তৈরি করুন" ঠিক না ঘটে; কোনও তর্ক থাকলেই সেগুলি প্রয়োগ হয়। এমনকি এটিও সম্ভব যে সি কোডের জন্য []
একই সি কোডটি কল করে list()
। যে কোনও ক্ষেত্রে (সি) এর সাথে জড়িত সময়টি (ক) + (খ) এর সাথে তুলনামূলকভাবে সামান্য হবে।
আমি ব্যবহার []
।
আমি সত্যিই এটি সম্পর্কে জানি না, তবে এটি আমার কাছে মনে হয়েছে, অভিজ্ঞতার দ্বারা, যে জেপিসিটি আসলে সঠিক। নিম্নলিখিত উদাহরণ: যদি আমি নিম্নলিখিত কোড ব্যবহার করি
t = [] # implicit instantiation
t = t.append(1)
দোভাষীর মধ্যে, তারপরে কল কলটি আমাকে কোনও তালিকা ছাড়াই কেবল "টি" দেয় এবং যদি আমি অন্য কিছু সংযোজন করি, যেমন
t = t.append(2)
আমি ত্রুটিটি পেয়েছি "'ননটাইপ' অবজেক্টটির কোনও 'অ্যাপেন্ড' নেই। তবে, যদি আমি তালিকাটি তৈরি করি
t = list() # explicit instantiation
তাহলে এটি ঠিক আছে works
t.append(1)
মডিফাই t
জায়গা, এটা কিছু ফেরত না কিন্তু None
এবং আপনি এই বরাদ্দ করা হয় None
থেকে t
। সুতরাং তালিকার পরিবর্তে t
এখন উল্লেখ None
করে। আপনার ভুলটি এখানে ন্যায়বিচারের t=t.append(1)
পরিবর্তে লিখতে হয়েছিল t.append(1)
। আপনি একই আচরণ লক্ষ্য করবেন list()
, সুতরাং এখানে কোনও পার্থক্য নেই।
কেবলমাত্র ডারকোনট উত্তরটি হাইলাইট করার জন্য কারণ আমি মনে করি এটি আরও দৃশ্যমান হওয়া উচিত।
new_list = []
বা new_list = list()
উভয়ই ভাল (পারফরম্যান্স উপেক্ষা করে), তবে append()
ফিরে আসে None
, ফলস্বরূপ আপনি করতে পারবেন না new_list = new_list.append(something
।
এই জাতীয় রিটার্ন-সংক্রান্ত সিদ্ধান্ত দেখে আমি খুব বিস্মিত হই। ইশ।