سؤال

أنا تعلم بايثون وجاء عبر هذا المثال:

W = ((0,1,2),(3,4,5),(0,4,8),(2,4,6))
b = ['a','b','c','d','e','f','g','h','i']
for row in W:
    print b[row[0]], b[row[1]], b[row[2]]

الذي يطبع:

أ ب ج

d e f

a e i

ج هـ ز

أنا أحاول أن أعرف لماذا!

أحصل على ذلك على سبيل المثال لأول مرة خلال النسخة الموسعة هو:

print b[(0,1,2)[0]], b[(0,1,2)[1]], b[(0,1,2)[2]]

ولكن أنا لا أفهم كيف (0,1,2) هو التفاعل.هل يستطيع أحد أن يقدم تفسيرا ؟ شكرا

(هذا هو نسخة مختصرة من بعض مدونة تيك تاك تو اللعبة, و أنه يعمل بشكل جيد, أنا فقط لا أفهم هذا الجزء)

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

المحلول

وذلك بالتكرار عبر الصفوف (tuple) من المجموعات، كل row هو الصفوف (tuple) ثلاثة عناصر، عند طباعته يصل إلى ثلاثة عناصر من قائمة b بحسب المؤشر، وهو ما تحتوي row الصفوف (tuple).

وربما، وسيلة أقل قليلا تشوش للقيام بذلك هي:

for f, s, t in W:
    print b[f], b[s], b[t]

نصائح أخرى

في النار، و(0,1,2) لا يفعل شيئا. انها لالصفوف (tuple)، ويمكن فهرستها تماما مثل قائمة، لذلك b[(0,1,2)[0]] يصبح b[0] منذ (0,1,2)[0] == 0.

في الخطوة الأولى بيثون لا b[row[0]] → → b[(0,1,2)[0]] b[0]'a'

وراجع للشغل، للحصول على سلع متعددة من تسلسل في وقت واحد يمكنك استخدام المشغل:

from operator import itemgetter
for row in W:
    print itemgetter(*row)(b)

والفهرسة والصفوف (tuple) فقط استخراج عنصر الألف، تماما كما عند فهرسة صفيف. وهذا يعني أن نسخة موسعة

print b[(0,1,2)[0]], b[(0,1,2)[1]], b[(0,1,2)[2]]

ويساوي

print b[0], b[1], b[2]

وIE، العنصر 0TH من (0، 1، 2) الصفوف (tuple) ((0, 1, 2)[0]) هي 0.

حاول أن أكتب قيم جميع المتغيرات في كل خطوة:النتيجة تحصل على حق.

التفاعل 1:

  • الصف (0,1,2)
  • ب[row[0]] ، ب[الصف[1]], b[الصف[2]] هو ب[(0,1,2)[0], (0,1,2)[1], (0,1,2)[2]], == b[0], b[1] ، ب[2]

التفاعل 2:

  • الصف هو (3,4,5)
  • ب[row[0]] ، ب[الصف[1]], b[الصف[2]] هو ب[3] ، ب[4] ، ب[5]
سوف

وبيثون قذيفة التفاعلية تساعدك على معرفة ما يجري على:

In [78]: W = ((0,1,2),(3,4,5),(0,4,8),(2,4,6))

In [79]: b = ['a','b','c','d','e','f','g','h','i']

In [81]: row=W[0]       # The first time throught the for-loop, row equals W[0]

In [82]: row
Out[82]: (0, 1, 2)

In [83]: row[0]
Out[83]: 0

In [84]: b[row[0]]
Out[84]: 'a'

In [85]: b[row[1]]
Out[85]: 'b'

In [86]: b[row[2]]
Out[86]: 'c'

وfor row in W:

والصفوف (tuple) الأولى وضعت في row هي (0,1,2)

وبعبارة أخرى، W[0] == (0,1,2)

Therefore, since `row` == (0,1,2), then row[0] == 0

وهكذا [0]th element of b == 'a'

b[0] == 'a'

ووهلم جرا ...

b[1] == 'b'
b[2] == 'c'
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top