هل قائمة الفهم في بيثون تقلل بطريقة فعالة الذاكرة?

StackOverflow https://stackoverflow.com/questions/5349755

  •  27-10-2019
  •  | 
  •  

سؤال

أنا مبتدئ في بيثون ، وهذا هو أول وظيفة لي ، لذلك لا تكون قاسية جدا :).لقد كنت ألعب مع بايثون مؤخرا وكنت أتساءل عما إذا كان هناك شيء مثل

max([x for x in range(25)]) 

سيؤدي إلى قيام بايثون أولا بإنشاء قائمة بجميع العناصر ثم العثور على الحد الأقصى ، مما يؤدي إلى وقت(2 ن) ، أو أنه سيتتبع الحد الأقصى كما كان يتكرر لـ Θ(ن).أيضا ، نظرا لأن النطاق يختلف في الثعبان 3 (كونه قابلا للتكرار) ، فهل سيجعله مختلفا عن الثعبان 2?

هل كانت مفيدة؟

المحلول

المثال الخاص بك سوف يؤدي إلى بيثون أولا بناء القائمة بأكملها.إذا كنت ترغب في تجنب ذلك ، يمكنك استخدام تعبير مولد بدلا من ذلك:

max((x for x in range(25)))

أو ببساطة:

max(x for x in range(25))

بالطبع (في بيثون 2), range في حد ذاته يبني قائمة كاملة ، لذلك ما تريد حقا في هذه الحالة هو:

max(x for x in xrange(25))

ومع ذلك ، فيما يتعلق بالوقت المستغرق ، فإن كل هذه التعبيرات لها نفس التعقيد.الفرق المهم هو أن الأخير يتطلب ا(1) الفراغ ، بينما يتطلب الآخرون ا (ن) الفراغ.

نصائح أخرى

تعمل عمليات فهم القائمة دائمًا على إنشاء قائمة (ما لم يطرح شيء استثناء).يوصى باستخدام النوع بدلاً من ذلك في معظم الحالات. Genacodicetagpre

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top