هناك تعبير خاص في بايثون يسمى الاشتقاق ، وتتمثل وظيفته في أخذ بنية البيانات كمدخل، ثم تصفيتها وحسابها، وأخيرًا إخراج بنية بيانات أخرى. وفقًا لهياكل البيانات المختلفة، يمكن تقسيمها إلى فهم القائمة، وفهم المجموعة، وفهم القاموس. دعونا نركز أولاً على فهم القائمة الأكثر استخدامًا.
دعونا أولاً نلقي نظرة على تنسيق بناء الجملة لفهم القائمة:
اسم القائمة=[كائن التعبير عن المتغير (ifcondition)]
listname: اسم القائمة التي تم إنشاؤها حديثًا.
التعبير : التعبير .
المتغير: اسم المتغير.
(إذا كان الشرط): يستخدم لتحديد القائمة التي تلبي المتطلبات من الكائن.
نبدأ من ثلاثة جوانب: قائمة القيم ضمن نطاق محدد، وقائمة الشروط المحددة، وقائمة مكونة من العناصر التي تحقق الشروط.
دعونا نفكر أولاً عندما نحتاج إلى إنشاء 10 أرقام وتخزينها في قائمة، دعونا نلقي نظرة أولاً على الطريقة الشائعة:
listname=[]foriinrange(10):listname.append(i)print(listname)
الإخراج هو:
[0,1,2,3,4,5,6,7,8,9]
يتطلب استخدام فهم القائمة سطرًا واحدًا فقط:
اسم القائمة=[iforiinrange(10)]
الإخراج هو:
[0,1,2,3,4,5,6,7,8,9]
يعمل هذا الأسلوب على تبسيط عملياتنا عند تحديد القوائم.
لنفترض أننا نعرف أن القائمة هي listname = [1,3,5,6,7,9,10,23,26,28,64,98]. ونريد العثور عليها وإضافة جميع الأرقام الموجودة فيها بمقدار 5. الطريقة العادية :
listname=[1,3,5,6,7,9,10,23,26,28,64,98]foriinrange(len(listname)):listname[i]+=5print(listname)
الإخراج هو:
[6،8،10،11،12،14،15،28،31،33،69،103]
يعد استخدام فهم القائمة أيضًا موجزًا للغاية:
listname=[1,3,5,6,7,9,10,23,26,28,64,98]listname=[i+5foriinlistname]
الإخراج:
[6،8،10،11،12،14،15،28،31،33،69،103]
يعد هذا النوع من فهم القائمة أكثر تعقيدًا من النوعين الأولين، ولكنه يمكنه تبسيط المزيد من التعليمات البرمجية.
لنأخذ مثالاً لإلقاء نظرة على تنسيق الكود:
ومن المعروف أن القائمة هي listname = [8,33,53,64,73,95,101,123,126,164,198]، ثم نحتاج إلى إيجاد الأرقام الموجودة في القائمة التي هي أقل من 100 وأكبر من 100، ثم نضربها في 0.8، وأخيراً إعادتهم إلى القائمة.
إذا استخدمنا الطريقة العادية:
listname=[10,20,30,40,60,120,130,140,160,180,200]newlist=[]#إنشاء قائمة جديدة لتخزين foriinrange(len(listname)):# اجتياز قيمة الفهرس iflistname[i]>100:#البحث عن رقم أكبر من 100 listname[ i]*=0.8# اضرب بـ 0.8 newlist.append(listname[i])#إضافة إلى القائمة الجديدة print(newlist)
الإخراج هو:
[96.0,104.0,112.0,128.0,144.0,160.0]
استخدام فهم القائمة:
listname=[10,20,30,40,60,120,130,140,160,180,200]newlist=[i*0.8foriinlistnameifi>100]print(newlist)
نتيجة الإخراج:
[96.0,104.0,112.0,128.0,144.0,160.0]
دعنا نحللها بناءً على البنية النحوية لهذا المثال:
يمكننا استخدام هذه الطريقة عند استخدام فهم القائمة المعقدة. يمكن أن نفهم أننا نختار أولاً العناصر التي تستوفي الشروط (العبارات الشرطية) من الكائن، ثم نعالج تعبير الإخراج، ثم نخزنها في النهاية في القائمة قائمة جديدة.
فيما يلي بعض الأمثلة على الأسئلة التي يمكنك تجربتها.
1. القائمة [1،2،13،22،25]، يرجى استخدام فهم القائمة لاستخراج أرقام أكبر من 10، وتربيع كل رقم، وأخيرًا الإخراج.
نتيجة التشغيل هي:
[169,484,625]
الكود كما يلي، يمكنك محاولة إكمال الإجابة المرجعية أولاً.
list=[1,2,13,22,25]newlist=[i*iforiinlistifi>10]print(newlist)
2. استخدم فهم القائمة للعثور على جميع الأرقام الفردية في القائمة وإنشاء قائمة جديدة، القائمة = [1، 2، 3، 4، 5، 6، 7، 8، 9، 10]
الرمز هو كما يلي:
list=[1,2,3,4,5,6,7,8,9,10]newlist=[iforiinlistifi%2==1]print(newlist)
الإخراج هو:
[1،3،5،7،9]