2012-09-06 53 views
0

我覺得我在這裏做一些非常愚蠢的。也許我太累了。更改多維列表中一行的值會更改所有行嗎?

我試圖做一個真值表的大小取決於「數」 - 爲表變量的數目。

table = [[None] * int(pow(2, count))] * count 
    in_a_row = pow(2, count)/2 
    iterator = 0 
    for i in range(count): 
     for j in range(int(pow(2, count))): 
      print(str(i) + ' ' + str(j), end = '') 
      if iterator < in_a_row: 
       table[i][j] = 'T' 
       print(' T') 
      elif iterator == 2 * in_a_row: 
       table[i][j] = 'T' 
       iterator = 0 
       print(' T') 
      else: 
       table[i][j] = 'F' 
       print(' F') 
      iterator += 1 

     print(table) 
     in_a_row /= 2 
     iterator = 0 

它輸出這樣的:

0 0 T 
0 1 T 
0 2 F 
0 3 F 
[['T', 'T', 'F', 'F'], ['T', 'T', 'F', 'F']] 
1 0 T 
1 1 F 
1 2 T 
1 3 F 
[['T', 'F', 'T', 'F'], ['T', 'F', 'T', 'F']] 

你可以看到什麼我在一個迭代中設置什麼是所有「行」遙相呼應。任何人都可以告訴我這裏有什麼問題嗎?

我當然期待這樣的:

[['T', 'T', 'F', 'F'], ['T', 'F', 'T', 'F']] 

回答

1

更改第一行:

table = [[None] * int(pow(2, count)) for _ in range(count) ] 

如你一定注意到,在第一個版本,每行股份參考到同一個列表,而在這個新版本中,我們爲每一行創建一個新列表。

+0

那好吧,這是有道理的,我想。就像一個指針差不多。我相信你缺少一個[在那裏,我不得不真正使用在第一部分相同的技術來得到它的工作,但'表= [[[在範圍內無]爲_(INT(POW(2,計數) ))] for _ in range(count)]'似乎工作。謝謝! – CMahaff

+0

@CMahaff - 對不起,我有一個額外的']'在那裏。 (這就是我沒有測試的結果)。是的,這就像一個「指針」。蟒蛇稱他們爲「參考」,但這主要是語義... – mgilson

1

它呼應的,因爲* count所有行。您基本上將存儲對最初創建的數據的引用count次。 mgilson有這個修復。

+0

哦,這是有道理的。謝謝你的解釋! – CMahaff

相關問題