回答
當你
[0] * 9
你得到一個list
九0
的:
[0, 0, 0, 0, 0, 0, 0, 0, 0]
當你
[[0] * 9] * 9
你
[[0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0]]
換句話說,你得到[0, 0, 0, 0, 0, 0, 0, 0, 0]
9次。但你必須小心,因爲這最後,使淺拷貝的名單。如果修改該列表中的一個元素,那麼它將在所有列表中「修改」(事實上,因爲所有這些元素都是相同的列表)。如果您希望每個列表都是不同的列表,您可以製作深層副本。
您可以輕鬆地通過使用print語句看到這一點:
test = [[0] * 9] * 9
test[0][1] = 2
print test
>>> [[0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 2, 0, 0, 0, 0, 0, 0, 0]]
注:名單是在Python [...]
一個更好的名字。閱讀有關列表和元組的更多信息。
但是,這是9個引用相同的列表。 –
@ e-satis是的,我已經添加了澄清。 – Christian
語法[0] * 9
將生成9個零的列表。所以我相信完整的代碼會生成9個9個零列表的列表。
注意:這是錯誤的。不要用它作爲樣板代碼。
當你
print [0] * 9
你
[0, 0, 0, 0, 0, 0, 0, 0, 0]
原始數組中的同一個元素是所有新的數組中的九個元素引用。所以,他們都打印0
。用同樣的方法,當你說
print [[0] * 9] * 9
它創造的9個零列表(認爲這是l1
),然後9個元素,所有這些都指向同一個列表(l1
)的另一份名單。因此,當您更改新創建的列表中的一個元素時,更改將反映在所有列表中。
正確的方式做,這將是
print [[0 for j in xrange(9)] for i in xrange(9)]
因爲,integers are immutables在Python中,您可以在同一寫成
print [[0] * 9 for i in xrange(9)]
- 1. PREEMPTIVE_XE_DISPATCHER這意味着什麼?
- 2. * | *這意味着什麼CSS?
- 3. 這是&意味着什麼?
- 4. $這意味着什麼PHP?
- 5. 這些陳述意味着什麼,並建議這種風格?
- 6. %,這意味着
- 7. 這個'&'在Ruby中意味着什麼?
- 8. 這在C中意味着什麼?
- 9. @符號在這裏意味着什麼
- 10. 這是什麼sql意味着
- 11. 這個Perl崩潰意味着什麼?
- 12. 這個表達意味着什麼「!!」
- 13. 這個表達意味着什麼?
- 14. 這些字段意味着什麼?
- 15. 在gdb中這意味着什麼?
- 16. 什麼robots.txt意味着在這一行?
- 17. 這是什麼頭意味着在PHP
- 18. 這意味着什麼可擴展性?
- 19. 這些警告意味着什麼C
- 20. 這是什麼 'CONTENT_TYPE' 意味着
- 21. 這在PowerPC中意味着什麼?
- 22. 這個表達意味着什麼:「R.string.gcm_registered」?
- 23. 這在AS3中意味着什麼?
- 24. %s在這裏意味着什麼?
- 25. 這些Java錯誤意味着什麼?
- 26. 什麼是 「[這]」 意味着C++
- 27. 這個聲明意味着什麼?...?
- 28. 變量$這意味着什麼PHP?
- 29. '$?'是什麼這意味着在Perl
- 30. 這究竟意味着什麼?
@zhangxaochen你確定嗎?那個人知道'*'在幹什麼,儘管不是完全的,並且被引用了。這裏的OP可能需要更深入和從頭開始的解釋。 – Guy