• 0

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

احتجت إلى إنشاء قائمة من قوائم في بايثون، فقمت بكتاب السطر التالي:

myList = [[1] * 4] * 3

ولقد أُنشئت القائمة التالية:

[[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]]  

لكن المشكلة عندما أقوم بتغيير قيمة عنصر واحد عن طريق السطر التالي:

myList[0][0] = 5

تتغير القيم في جميع القوائم في القائمة كالتالي:

[[5, 1, 1, 1], [5, 1, 1, 1], [5, 1, 1, 1]]  

فما حل هذه المشكلة؟

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


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

حل هذه المشكلة بسيط، فالمشكلة حدثت بسبب خطأ في تكوين القائمة، فعندما تكتب [x]*3 فسوف تحصل على قائمة [x, x, x] والتي هي قائمة بها 3 مراجع لـ x وفي هذه الحالة عندما تُغير قيمة x سوف تتغير قيم المراجع الثلاثة.
ولحل هذه المشكلة، يجب عليك أن تتأكد من إنشاء قائمة جديدة في كل موقع من مواقع القائمة الأصلية، ويمكنك فعل ذلك عن طريق استخدام حلقة التكرار for كما في المثال التالي:

[[1]*4 for n in range(3)]

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


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

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

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

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


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

تسجيل الدخول

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


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