سؤال

في Python Shell ، دخلت:

aList = ['a', 'b', 'c', 'd']  
for i in aList:  
    print(i)

وحصلت

a  
b  
c  
d  

لكن عندما حاولت:

aList = ['a', 'b', 'c', 'd']  
aList = aList.append('e')  
for i in aList:  
    print(i) 

وحصلت

Traceback (most recent call last):  
  File "<pyshell#22>", line 1, in <module>  
    for i in aList:  
TypeError: 'NoneType' object is not iterable  

لا أحد يعرف ما يجري؟ كيف يمكنني إصلاح/الالتفاف حوله؟

هل كانت مفيدة؟

المحلول

list.append هي طريقة تعدل القائمة الحالية. لا يعيد قائمة جديدة - يعود None, ، مثل معظم الطرق التي تعدل القائمة. ببساطة افعل aList.append('e') وستحصل قائمتك على إلحاق العنصر.

نصائح أخرى

بشكل عام ، ما تريده هو الإجابة المقبولة. ولكن إذا كنت تريد سلوك تجاوز القيمة وإنشاء قائمة جديدة (وهو أمر معقول في بعض الحالات^) ، فإن ما يمكنك فعله بدلاً من ذلك هو استخدام "مشغل splat" ، والمعروف أيضًا باسم تفريغ القائمة:

aList = [*aList, 'e']
#: ['a', 'b', 'c', 'd', 'e']

أو ، إذا كنت بحاجة إلى دعم Python 2 ، استخدم + المشغل أو العامل:

aList = aList + ['e']
#: ['a', 'b', 'c', 'd', 'e']

^ هناك العديد من الحالات التي تريد تجنب الآثار الجانبية للتحول معها .append(). لأحد ، تخيل أنك تريد إلحاق شيء ما إلى قائمة اتخذتها كوسيطة وظيفة. من يستخدم الوظيفة ربما لا يتوقع أن يتم تغيير القائمة التي قدموها. استخدام شيء مثل هذا يحافظ على وظيفتك "نقي" بدون "آثار جانبية".

احذف الخط الثاني aList = aList.append('e') واستخدام فقط aList.append("e"), ، هذا يجب أن يتخلص من هذه المشكلة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top