اذهب إلى المحتوى

السؤال

نشر

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

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]]

Recommended Posts

  • 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]

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...