मैं How to think like a computer scientist पढ़ रहा हूं जो "पायथन प्रोग्रामिंग" के लिए एक प्रारंभिक पाठ है।मल्टीप्ली ऑपरेटर सूची (डेटा संरचना) पर लागू
सूचियों पर लागू होने पर मैं गुणा करने वाले ऑपरेटर (*
) के व्यवहार को स्पष्ट करना चाहता हूं।
पर विचार करें समारोह make_matrix
def make_matrix(rows, columns):
"""
>>> make_matrix(4, 2)
[[0, 0], [0, 0], [0, 0], [0, 0]]
>>> m = make_matrix(4, 2)
>>> m[1][1] = 7
>>> m
[[0, 0], [0, 7], [0, 0], [0, 0]]
"""
return [[0] * columns] * rows
वास्तविक उत्पादन है
[[0, 7], [0, 7], [0, 7], [0, 7]]
make_matrix का सही संस्करण है:
def make_matrix(rows, columns):
"""
>>> make_matrix(3, 5)
[[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]
>>> make_matrix(4, 2)
[[0, 0], [0, 0], [0, 0], [0, 0]]
>>> m = make_matrix(4, 2)
>>> m[1][1] = 7
>>> m
[[0, 0], [0, 7], [0, 0], [0, 0]]
"""
matrix = []
for row in range(rows):
matrix += [[0] * columns]
return matrix
कारण है कि make_matrix के पहले संस्करण में विफल रहता है (के रूप में 9.8 पर किताब में बताया गया है) कि
... प्रत्येक पंक्ति अन्य पंक्तियों के उपनाम है ...
मुझे आश्चर्य है कि क्यों
[[0] * columns] * rows
का कारण बनता है ... प्रत्येक पंक्ति अन्य पंक्तियों के उपनाम है ...
नहीं बल्कि
+०१२३५१६४१०६१[[0] * columns]
अर्थात क्यों एक पंक्ति में प्रत्येक [0]
अन्य पंक्ति तत्व के उपनाम नहीं है।
सही लगता है, बहुत बहुत धन्यवाद !! – fizzbuzz
+1 - बहुत अच्छी व्याख्या –