بايثون - قائمة الفهم
قائمة الفهم
يوفر فهم القائمة بنية أقصر عندما تريد إنشاء قائمة جديدة بناءً على قيم قائمة موجودة.
مثال:
بناءً على قائمة الفواكه ، فأنت تريد قائمة جديدة تحتوي فقط على الفاكهة مع الحرف "a" في الاسم.
بدون فهم القائمة ، سيتعين عليك كتابة for
بيان مع اختبار مشروط بالداخل:
مثال
fruits = ["apple", "banana", "cherry", "kiwi", "mango"]
newlist = []
for x in fruits:
if "a" in x:
newlist.append(x)
print(newlist)
باستخدام list comprehension ، يمكنك فعل كل ذلك بسطر واحد فقط من التعليمات البرمجية:
مثال
fruits = ["apple", "banana", "cherry", "kiwi", "mango"]
newlist = [x
for x in fruits if "a" in x]
print(newlist)
النحو
newlist = [expression for item in iterable if condition == True]
القيمة المعادة هي قائمة جديدة ، مع ترك القائمة القديمة دون تغيير.
حالة
يشبه الشرط عامل التصفية الذي لا يقبل سوى العناصر التي يتم التقييم لها
True
.
مثال
اقبل فقط العناصر التي ليست "تفاحة":
newlist = [x for x in fruits if x != "apple"]
الحالة
if x != "apple"
سيعود True
لجميع العناصر ما عدا "تفاحة" ، مما يجعل القائمة الجديدة تحتوي على جميع الفواكه ما عدا "تفاحة".
الشرط اختياري ويمكن حذفه:
مثال
بدون if
بيان:
newlist = [x for x in fruits]
متوقعة
يمكن أن يكون العنصر القابل للتكرار أي كائن قابل للتكرار ، مثل قائمة ، أو مجموعة ، أو مجموعة ، إلخ.
مثال
يمكنك استخدام range()
الوظيفة لإنشاء ملف قابل للتكرار:
newlist = [x for x in range(10)]
نفس المثال ، لكن بشرط:
مثال
قبول الأرقام الأقل من 5 فقط:
newlist = [x for x in range(10) if x < 5]
تعبير
التعبير هو العنصر الحالي في التكرار ، ولكنه أيضًا النتيجة ، والتي يمكنك معالجتها قبل أن ينتهي بها الأمر كعنصر قائمة في القائمة الجديدة :
مثال
عيّن القيم في القائمة الجديدة إلى أحرف كبيرة:
newlist = [x.upper()
for x in fruits]
يمكنك ضبط النتيجة على ما تريد:
مثال
اضبط جميع القيم في القائمة الجديدة على "مرحبًا":
newlist = ['hello' for x in fruits]
يمكن أن يحتوي التعبير أيضًا على شروط ، ليس مثل عامل التصفية ، ولكن كطريقة لمعالجة النتيجة:
مثال
إرجاع كلمة "برتقالي" بدلاً من كلمة "banana":
newlist = [x if x != "banana" else "orange"
for x in fruits]
يقول التعبير في المثال أعلاه:
"قم بإرجاع العنصر إذا لم يكن موزًا ، إذا كان موزًا برتقاليًا".