পাইথনে একটি খালি তালিকা তৈরি করা হচ্ছে


243

পাইথনে নতুন খালি তালিকা তৈরি করার সর্বোত্তম উপায় কী?

l = [] 

অথবা

l = list()

আমি দুটি কারণে এই জিজ্ঞাসা করছি:

  1. প্রযুক্তিগত কারণে, যা হিসাবে দ্রুত। (ক্লাস তৈরি করা ওভারহেডের কারণ হয়?)
  2. কোড পাঠযোগ্যতা - কোনটি স্ট্যান্ডার্ড কনভেনশন।

4
"দ্রুত"? আপনি টাইমিট চালাননি কেন?
এসলট

উত্তর:


335

কোডের কোন অংশটি দ্রুত তা আপনি এখানে পরীক্ষা করতে পারেন:

% 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()কারণ এটি উচ্চারণযোগ্য


12
বাহ, প্রোফাইলিংয়ের জন্য ধন্যবাদ। এটি কীভাবে করা হয়েছিল তা আমি সবসময় জানতে চেয়েছিলাম।
ব্যবহারকারী 225312

কেন list('')দিতে []পরিবর্তে ['']?
Chris_Rands

কারণ এই ফানক পুনরাবৃত্তিযোগ্য প্রকারের তালিকা তৈরি করে, আপনি 1 টিরও বেশি যুক্তি সন্নিবেশ করতে পারেননি। (টাইপ করার চেষ্টা করুন list('abcd')এবং আপনি সমস্ত কিছু বুঝতে পারেন)
ইভান ল্যাভরনভ

133

list()অন্তর্নিহিত তুলনায় ধীর গতির [], কারণ

  1. এখানে সিম্বল লুক রয়েছে (অজগরটির আগে থেকে কোনও উপায় জানার উপায় নেই যদি আপনি কেবল অন্য কিছু হিসাবে তালিকাটিকে পুনরায় সংজ্ঞায়িত না করেন!),

  2. ফাংশন প্রার্থনা আছে,

  3. তারপরে এটি পরীক্ষা করতে হবে যে পুনরাবৃত্তিযোগ্য আর্গুমেন্ট পাস হয়েছে কিনা (যাতে এটি এর উপাদানগুলির সাথে তালিকা তৈরি করতে পারে) PS। আমাদের ক্ষেত্রে কিছুই নেই তবে "যদি" চেক আছে

বেশিরভাগ ক্ষেত্রে গতির পার্থক্য যদিও কোনও ব্যবহারিক পার্থক্য করে না।


38
+1: এর list()চেয়ে ধীর কেন তা বুঝতে পেরে ভাল লাগছে []!
এরিক হে লেবিগোট

2
এর ক্ষেত্রে list()কেবল কোনও তর্ক ছিল কিনা তা পরীক্ষা করে দেখতে হবে ... "পুনরাবৃত্তিযোগ্য কিনা তা পরীক্ষা করুন" এবং "উপাদানগুলির সাথে তালিকা তৈরি করুন" ঠিক না ঘটে; কোনও তর্ক থাকলেই সেগুলি প্রয়োগ হয়। এমনকি এটিও সম্ভব যে সি কোডের জন্য []একই সি কোডটি কল করে list()। যে কোনও ক্ষেত্রে (সি) এর সাথে জড়িত সময়টি (ক) + (খ) এর সাথে তুলনামূলকভাবে সামান্য হবে।
জন মাচিন

1
@ জন মাচিন - বিভ্রান্তির জন্য দুঃখিত, আমি (গ) এর অর্থ কী ছিল যে হ্যাঁ, এটির তর্ক করা দরকার কিনা। বাকী ছিল বিতর্ক থাকলে কী হবে তা নিয়ে, যা আমাদের ক্ষেত্রে কিছুই নেই
নাস বনভ

16

আমি ব্যবহার []

  1. এটি দ্রুততর কারণ তালিকা স্বরলিপিটি একটি শর্ট সার্কিট।
  2. আইটেম সহ একটি তালিকা তৈরি করা ছাড়া তালিকাগুলি তৈরি করা একই রকম হওয়া উচিত, কেন কোনও পার্থক্য থাকা উচিত?

3

আমি সত্যিই এটি সম্পর্কে জানি না, তবে এটি আমার কাছে মনে হয়েছে, অভিজ্ঞতার দ্বারা, যে জেপিসিটি আসলে সঠিক। নিম্নলিখিত উদাহরণ: যদি আমি নিম্নলিখিত কোড ব্যবহার করি

t = [] # implicit instantiation
t = t.append(1)

দোভাষীর মধ্যে, তারপরে কল কলটি আমাকে কোনও তালিকা ছাড়াই কেবল "টি" দেয় এবং যদি আমি অন্য কিছু সংযোজন করি, যেমন

t = t.append(2)

আমি ত্রুটিটি পেয়েছি "'ননটাইপ' অবজেক্টটির কোনও 'অ্যাপেন্ড' নেই। তবে, যদি আমি তালিকাটি তৈরি করি

t = list() # explicit instantiation

তাহলে এটি ঠিক আছে works


15
ইহার কারণ t.append(1)মডিফাই tজায়গা, এটা কিছু ফেরত না কিন্তু Noneএবং আপনি এই বরাদ্দ করা হয় Noneথেকে t। সুতরাং তালিকার পরিবর্তে tএখন উল্লেখ Noneকরে। আপনার ভুলটি এখানে ন্যায়বিচারের t=t.append(1)পরিবর্তে লিখতে হয়েছিল t.append(1)। আপনি একই আচরণ লক্ষ্য করবেন list(), সুতরাং এখানে কোনও পার্থক্য নেই।
ডারকনাট

1

কেবলমাত্র ডারকোনট উত্তরটি হাইলাইট করার জন্য কারণ আমি মনে করি এটি আরও দৃশ্যমান হওয়া উচিত।

new_list = []বা new_list = list()উভয়ই ভাল (পারফরম্যান্স উপেক্ষা করে), তবে append()ফিরে আসে None, ফলস্বরূপ আপনি করতে পারবেন না new_list = new_list.append(something

এই জাতীয় রিটার্ন-সংক্রান্ত সিদ্ধান্ত দেখে আমি খুব বিস্মিত হই। ইশ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.