[英]How is this 2D array being sized by FOR loops?
問題背景:
這是我看過的第一段Python代碼,因此,我假設我的線程標題在解釋該代碼實際上試圖實現的目的(即設置2D數組)時是正確的。
編碼:
我正在查看的代碼基於兩個for循環設置2D數組的大小:
n = len(sentences)
values = [[0 for x in xrange(n)] for x in xrange(n)]
for i in range(0, n):
for j in range(0, n):
values[i][j] = self.sentences_intersection(sentences[i], sentences[j])
如果使用sentences
變量的length屬性設置數組的每一側,我都可以理解,除非實際上這是xrange
通過使用基於長度的循環大小來做什么的?
任何有助於解釋數組設置方式的幫助都將非常有用。
這段代碼實際上有點多余。
首先,您需要認識到values
不是數組,而是列表。 列表是動態大小的一維結構。
代碼的第二行使用嵌套列表理解來創建一個大小為n的列表,該列表的每個元素本身就是一個由n個零組成的列表。
第二個循環遍歷此列表列表,並根據sentences_intersection
交叉設置每個元素。
這是多余的原因是因為列表不需要預先分配。 實際上,作者應該只用正確的值構建列表,然后附加它們,而不是進行兩次單獨的迭代。
這樣會更好:
n = len(sentences)
values = []
for i in range(0, n):
inner = []
for j in range(0, n):
inner.append(self.sentences_intersection(sentences[i], sentences[j]))
values.append(inner)
但是如果您願意,您實際上可以在列表理解中完成整個操作:
values = [[self.sentences_intersection(sentences[i], sentences[j]) for i in xrange(n)] for j in xrange(n)]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.