簡體   English   中英

二維數組如何通過FOR循環確定大小?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM