لإنشاء قائمة جديدة في Python عن طريق استخراج أو حذف عناصر القائمة (المصفوفة) الموجودة فقط التي تفي بشروط معينة ، أو عن طريق إجراء عمليات الاستبدال أو التحويلات ، استخدم list comprehensions.
يتم شرح ما يلي هنا ، جنبًا إلى جنب مع نموذج التعليمات البرمجية.
- الشكل الأساسي لتدوين قائمة الفهم
- طبق العملية على جميع عناصر القائمة
- استخراج وحذف العناصر من القائمة التي تلبي المعايير
- استبدال أو تحويل العناصر التي تلبي شروط القائمة
راجع المقالة التالية للحصول على أمثلة محددة لقوائم السلاسل.
من الممكن أيضًا استخراج العناصر التي لا تستوفي المعايير بشكل عشوائي.
لاحظ أن القوائم يمكن أن تخزن أنواعًا مختلفة من البيانات وتختلف تمامًا عن المصفوفات. إذا كنت تريد التعامل مع المصفوفات في العمليات التي تتطلب حجم الذاكرة وعناوين الذاكرة أو المعالجة الرقمية للبيانات الكبيرة ، فاستخدم مصفوفة (مكتبة قياسية) أو NumPy.
القائمة التالية هي مثال
l = list(range(-5, 6))
print(l)
# [-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5]
الشكل الأساسي لتدوين قائمة الفهم
عند إنشاء قائمة جديدة من قائمة ، فإن كتابة قائمة الإدراك أسهل من كتابة حلقات for.
[expression for any variable name in iterable object if conditional expression]
يتم تطبيق التعبير على عنصر يلبي التعبير الشرطي لكائن قابل للتكرار (مثل قائمة أو مجموعة) ويصبح عنصرًا في قائمة جديدة. يمكن حذف “إذا كان التعبير الشرطي” ، وفي هذه الحالة يتم تطبيق التعبير على جميع العناصر.
راجع المقالة التالية للحصول على مزيد من التفاصيل ، بما في ذلك تدوين القائمة المتداخلة.
طبق العملية على جميع عناصر القائمة
على سبيل المثال ، إذا كنت تريد تطبيق بعض المعالجة على جميع عناصر القائمة ، فقم بوصف المعالجة المطلوبة في تعبير قائمة الفهم أعلاه.
l_square = [i**2 for i in l]
print(l_square)
# [25, 16, 9, 4, 1, 0, 1, 4, 9, 16, 25]
l_str = [str(i) for i in l]
print(l_str)
# ['-5', '-4', '-3', '-2', '-1', '0', '1', '2', '3', '4', '5']
يمكن استخدام هذا للتحويل بين قوائم الأرقام وقوائم السلاسل.
استخراج وحذف العناصر من القائمة التي تلبي المعايير
إذا كان العنصر سيتم تحديده فقط بواسطة تعبير شرطي ، فلن تتم معالجته بواسطة تعبير ، لذلك يأخذ النموذج التالي
[variable name for variable name in original list if conditional expression]
يتم إنشاء قائمة جديدة يتم من خلالها استخراج العناصر التي تفي بالشرط (العناصر التي يكون التعبير الشرطي صحيحًا من أجلها).
l_even = [i for i in l if i % 2 == 0]
print(l_even)
# [-4, -2, 0, 2, 4]
l_minus = [i for i in l if i < 0]
print(l_minus)
# [-5, -4, -3, -2, -1]
إذا تم تعيين “إذا لم يكن التعبير الشرطي” على “إذا لم يكن تعبيرًا شرطيًا” ، فإنه يصبح نفيًا ، ويمكن فقط تحديد واستخراج العناصر التي لا تفي بالشرط (العناصر التي يكون التعبير الشرطي فيها خاطئًا). بمعنى آخر ، يتم إنشاء قائمة جديدة يتم من خلالها إزالة العناصر التي تفي بالشرط.
l_odd = [i for i in l if not i % 2 == 0]
print(l_odd)
# [-5, -3, -1, 1, 3, 5]
l_plus = [i for i in l if not i < 0]
print(l_plus)
# [0, 1, 2, 3, 4, 5]
بالطبع ، يتم الحصول على نفس النتيجة بتحديد التعبير الشرطي المكافئ دون استخدام عدم.
l_odd = [i for i in l if i % 2 != 0]
print(l_odd)
# [-5, -3, -1, 1, 3, 5]
l_plus = [i for i in l if i >= 0]
print(l_plus)
# [0, 1, 2, 3, 4, 5]
يمكن أن يكون جزء التعبير الشرطي شروطًا متعددة. يمكن أيضًا استخدام النقط السالبة.
l_minus_or_even = [i for i in l if (i < 0) or (i % 2 == 0)]
print(l_minus_or_even)
# [-5, -4, -3, -2, -1, 0, 2, 4]
l_minus_and_odd = [i for i in l if (i < 0) and not (i % 2 == 0)]
print(l_minus_and_odd)
# [-5, -3, -1]
استبدال أو تحويل العناصر التي تلبي شروط القائمة
في مثال استخراج العنصر أعلاه ، تمت إزالة العناصر التي لا تفي بالشروط.
إذا كنت تريد إجراء استبدالات وتحويلات وما إلى ذلك فقط على العناصر التي تفي بالشروط ، فقم بتطبيق عامل التشغيل الثلاثي على جزء التعبير من تدوين قائمة الفهم.
في بايثون ، يمكن كتابة العامل الثلاثي على النحو التالي
True Value if Conditional Expression else False Value
a = 80
x = 100 if a > 50 else 0
print(x)
# 100
b = 30
y = 100 if b > 50 else 0
print(y)
# 0
إنه أمر معقد بعض الشيء ، لكن الجمع بين تدوين قائمة الفهم والعوامل الثلاثية يكون على النحو التالي.
[True Value if Conditional Expression else False Value for any variable name in original list]
الجزء المضمن بين قوسين هو العامل الثلاثي (الأقواس ليست ضرورية في الكود الفعلي).
[(True Value if Conditional Expression else False Value) for any variable name in original list]
إذا تمت كتابة أي اسم متغير كما هو للقيم الحقيقية أو الخاطئة ، يتم استخدام قيمة العنصر الأصلي كما هي. إذا تمت كتابة تعبير ، فسيتم تطبيق معالجة ذلك التعبير.
l_replace = [100 if i > 0 else i for i in l]
print(l_replace)
# [-5, -4, -3, -2, -1, 0, 100, 100, 100, 100, 100]
l_replace2 = [100 if i > 0 else 0 for i in l]
print(l_replace2)
# [0, 0, 0, 0, 0, 0, 100, 100, 100, 100, 100]
l_convert = [i * 10 if i % 2 == 0 else i for i in l]
print(l_convert)
# [-5, -40, -3, -20, -1, 0, 1, 20, 3, 40, 5]
l_convert2 = [i * 10 if i % 2 == 0 else i / 10 for i in l]
print(l_convert2)
# [-0.5, -40, -0.3, -20, -0.1, 0, 0.1, 20, 0.3, 40, 0.5]