سؤال

a = [3, 4, 5, 6, 7, 8]

for j in range(1, len(a)): #assigns as index the number given   
    print(j)    #1 2 3 4 5 Iterates from number given on 1st argument to length of "a"
    key = a[j]
    print(key)  #4 5 6 7 8 got index of j given 1, here starts at second number
    i = j - 1
    print(i)    #0 1 2 3 4 because of j - 1
    a[i+1] = a[i]
    print(i)    #0 1 2 3 4
    print(a[i]) #3 3 3 3 3 WHY?
    i = i - 1
    print(i)   #-1 0 1 2 3 because of i - 1
    a[i+1] = key
    print(key)  #4 5 6 7 8 [-1+1=0] WHY starts from 4?

سؤالي حقا هو، لماذا التلاعب a[i+' '] عبث مع القائمة؟هنا هو كما a[i+1], ولكن إذا كتبت a[i+3] إنه يعبث بجميع الأرقام، لماذا يحدث ذلك؟كيف يتم ربطها؟

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

المحلول

سأتناول هذا التعليق:

print(a[i]) #3 3 3 3 3 WHY?

أنت تقوم أساسًا بنسخ العنصر الأول إلى العنصر الثاني، ثم الثالث، وهكذا.لرؤية ذلك، حاول تشغيل هذا الكود:

a = [3, 4, 5, 6, 7, 8]
for j in range(1, len(a)):
    i = j - 1
    a[i+1] = a[i]
    print(a)

هذه العوائد:

[3, 3, 5, 6, 7, 8]
[3, 3, 3, 6, 7, 8]
[3, 3, 3, 3, 7, 8]
[3, 3, 3, 3, 3, 8]
[3, 3, 3, 3, 3, 3]

لهذا التعليق:

print(key)  #4 5 6 7 8 [-1+1=0] WHY starts from 4?

لاحظ أنه في كل تكرار لـ for حلقة، أنت تقوم بتخزينها مؤقتًا a[j] إلى متغير محلي يسمى key.بعد تعديل القائمة عن طريق إجراء مهام مختلفة، سيتم key سيظل المتغير يحتوي على a[j] بنهاية الحلقة.لم يتم تعديله!لذلك فمن المنطقي أن طباعة key لاحقًا سيعطيك نفس النتائج التي حصلت عليها عندما قمت بطباعة الملف key سابقًا.

نصائح أخرى

مجرد مرجع مستقبلي، بايثون ليس C/C++.لا تحتاج إلى الوصول إلى العناصر عبر فهرسها في ملف for حلقة.إذا وجدت نفسك بحاجة إلى الفهرس فيجب عليك استخدامه enumerate().

for index, value in enumerate(['a', 'b', 'c']):
    print(index, value)

سوف يؤدي إلى:

0 'a'
1 'b'
2 'b'

أجد صعوبة في فهم ما تطلبه هنا، لذلك:

print(a[i]) #3 3 3 3 3 WHY?

في التكرار الأول، تقوم بتعيين a[1] = a[0]، أي a[1] = 3.في هذا التكرار الثاني، تقوم بتعيين a[2] = a[1].تم ضبط a[1] مسبقًا على 3، لذا تم ضبط a[2] على ثلاثة.في التكرار الثالث، قمت بتعيين a[3] = a[2]، والذي تم تعيينه مسبقًا على 3...رؤية النمط؟

بالنسبة لسؤالك الأول:a = [3,4,5,6,7,8] في البداية، ثم عندما تبدأ الحلقة:

الحلقة الأولى:j = 1, key = 4,i = j - 1 = 0, ، وانت كذلكa[i+1] = a[i] وهو الآن a[1] = a[0], ، لذلك قمت بإعطاء القيمة في a[0] = 3 to a[1], ، هكذا هي القائمة a = [3,3,5,6,7,8] الآن.عند الطباعة a[i] الذي a[0] هو 3.وانت كذلك i = i -1, ، لذا i = -1, a[i+1] = a[0] = key = 4, ، هكذا هي القائمة [4,3,5,6,7,8] الآن.

الحلقة الثانية:

 j = 2, key = 5,i = j -1 = 1

, ، وانت كذلكa[i+1] = a[i] وهو الآن a[2] = a[1], ، لذلك قمت بإعطاء القيمة في a[1] = 3 (لأننا حصلنا على القائمة الجديدة من الحلقة الأخيرة) إلى a[2], ، هكذا هي القائمة a = [4,3,3,6,7,8] الآن.عند الطباعة a[i] الذي a[1] يكون 3.وانت كذلك i = i - 1, so i = 0, a[i+1] = a[1] = key = 5, ، هكذا هي القائمة [4,5,3,6,7,8] الآن.

وبالنسبة لبقية الحلقة، يمكنك الاستنتاج بنفس الطريقة، ثم يمكنك الحصول على الإجابة.نأمل أن يكون هذا مفيدا.

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