這看起來非常像“元組列表”。
列表列表示例:
我們可以使用嵌套列表合成來創建壹個表。以下示例創建壹個由“序列的序列”組成的表格,並為表格的每個單元格賦值。
table=【【範圍(6)中的I為0】【範圍(6)中的j為0】
打印表格
對於範圍(6)內的d1:
對於範圍(6)中的d2:
表【d 1】【D2】= d 1+D2+2
打印表格
123456
該程序的輸出如下:
[[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]],
[[2, 3, 4, 5, 6, 7], [3, 4, 5, 6, 7, 8], [4, 5, 6, 7, 8, 9],?
[5, 6, 7, 8, 9, 10], [6, 7, 8, 9, 10, 11], [7, 8, 9, 10, 11, 12]]
1234
這個程序做了兩件事:它創建了壹個6 × 6的全0表。然後用兩個骰子的可能組合值填充表格。這不是實現該功能的最有效方法,但是我們將通過這個簡單的示例演示幾種技術。讓我們仔細看看該計劃的兩個部分。
程序的第壹部分創建並輸出包含六個元素的列表,我們稱之為“表”;表中的每個元素都是壹個包含6 0個元素的列表。它使用列表派生為範圍從0到6的每個j創建壹個對象。每個對象都是壹個由0個元素組成的列表,由從0到6遍歷的I個變量生成。初始化完成後,打印出壹個二維全0表。
推導可以從裏到外閱讀,就像壹個普通的表達式。內部列表【範圍(6)中I的0】創建了壹個包含6個0的簡單列表。外部列表【【...】for j in range(6)】創建了這些內部列表的六個深層副本。
程序的第二部分叠代兩個骰子的每個組合,並填充表格的每個單元格。這是通過兩個嵌套循環實現的,每個循環叠代壹個骰子。外部循環枚舉第壹個骰子的所有可能值d1。內部循環枚舉第二個骰子d2。
更新每個單元格時,需要通過表格【d1】選擇每壹行;這是壹個包含六個值的列表。此列表中選定的單元格由以下人員選擇...【d2】。我們將骰子的值分配給該單元格d1+d2+2。
其他示例:
打印的列表不容易閱讀。以下循環以可讀性更好的形式顯示表格。
對於表中的行:
打印行
[2, 3, 4, 5, 6, 7]
[3, 4, 5, 6, 7, 8]
[4, 5, 6, 7, 8, 9]
[5, 6, 7, 8, 9, 10]
[6, 7, 8, 9, 10, 11]
[7, 8, 9, 10, 11, 12]
12345678910111213
作為練習,讀者可以在打印列表內容時嘗試打印行和列的標題。順便說壹下,使用“% 2d“%值字符串操作符可以打印固定長度的數字格式。
顯示顯式索引值。
接下來,我們匯總骰子表,得到累計頻率表。我們使用壹個包含13個元素(下標範圍從0到12)的列表來表示每個骰子值的頻率。據觀察,骰子值2在矩陣中僅出現壹次,因此我們預計FQ【2】的值為1。遍歷矩陣中的每個單元格並獲得累積頻率表。
FQ = 13 *【0】
對於範圍(6)內的I:
對於範圍(6)中的j:
c=表【I】【j】
FQ【c】+= 1
12345
使用下標I選擇表格中的壹行,使用下標j從該行中選擇壹列以獲得單元格c .然後使用fq計算頻率。
這看起來非常數學化和標準化。
Python提供了另壹種更簡單的方法。
使用列表叠代器而不是下標,表是列表的列表,您可以通過使用不帶下標的for循環來叠代列表元素。
FQ = 13 *【0】
打印fq
對於表中的行:
對於行中的c:
FQ【c】+= 1
打印FQ【2: