• 0

كيف أحصل على عناصر المتكررة في قائمتين في بايثون؟

أريد الحصول على قائمة بها العناصر المتكررة بين قائمتين في البايثون (أي العناصر الموجودة في القائمتين معا)، قمت بكتابة هذه الشيفرة لفعل ذلك:

b1 = [1,2,3,4,5,9,11,15]
b2 = [4,5,6,7,8]
b3 = [val for val in b1 if val in b2]

لكنها لم تعمل على القوائم المتداخلة كما في المثال التالي:

c1 = [1, 6, 7, 10, 13, 28, 32, 41, 58, 63]
c2 = [[13, 17, 18, 21, 32], [7, 11, 13, 14, 28], [1, 5, 6, 8, 15, 16]]

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
  • 0

هنالك عدة طرق لحل هذه المشكلة، فيمكنك مثلا ببساطة القيام بتسطيح (flatten) القائمة المتداخلة أو يمكنك القيام بترشيح (فلترة) عناصر الموجودة في القائمتين كما في المثال التالي:

c3 = [filter(lambda x: x in c1, sublist) for sublist in c2]

يقوم filter بفحص جميع عناصر القائمة الثانية ويتأكد من أنها غير موجود في القائمة الأول.
كما يمكنك أيضا استخدام intersection و set للحصول على العناصر المتكررة كما في المثال التالي:

>>> b1 = [1,2,3,4,5,9,11,15]
>>> b2 = [4,5,6,7,8]
>>> set(b1).intersection(b2)
set([4, 5])

ويمكنك أيضا عمل تغيير بسيط للسطر الأخير للمثال الذي وضعته وستحصل على ما تريد كما في المثال التالي:

[[n for n in lst if n in c1set] for lst in c2]

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة

يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن