كيف الفهرسة قائمة مع tuple العمل ؟
سؤال
أنا تعلم بايثون وجاء عبر هذا المثال:
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'