range list for
range 不可變序列
range函式文件網址https://docs.python.org/zh-tw/3.14/library/functions.html#func-range
參數介紹
range(起始值start, 不包含結束值stop, 間隔step)
range(0, 10, 1)
以上產生0 - 9的數字 0, 1, 2, 3 … 9
數學公式如下:
起始值start <= 要產生的數字 < 結束值stop
注意!不包含結束值10。
使用range,要用list(range),把range強制轉型成list,才可以顯示數字。
list(range)
1
2
r = range(0, 10, 1)
print(list(r))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
參數預設值
start 預設為0
step 預設為1
range(10)
產生0 - 9的數字,因為start預設為0,step預設為1,若只有代入一個參數,這個參數是stop結束值,因為只有結束值沒有預設值,是必填,注意!不包含結束值。
1
2
r = range(10)
print(list(r))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
range(1, 10)
產生1 - 9的數字,因為start修改為1,step預設為1,若只有代入二個參數,第1個參數是start = 1,第二個參數是stop結束值,注意!不包含結束值。
1
2
r = range(1, 10)
print(list(r))
[1, 2, 3, 4, 5, 6, 7, 8, 9]
range(1, 10, 2)
產生1, 3, 5, 7, 9的數字,不包含10。
start修改為1,step修改為2。
1
2
r = range(1, 10, 2)
print(list(r))
[1, 3, 5, 7, 9]
for介紹
for 流程如下:
- for移到range的第一個值。
- 檢查是不是結束值
- 不是結束值,把值取出來,並把值指派給「變數」
- 執行程式碼。
- for 移到range下一個值,從步驟2循環。

語法
for 變數 in range(結束值):
程式碼
for i in range(1, 10, 1):
print(i)
flowchart TD
A[Range是否有值] --> B{判斷是不是結束值}
B -->|False| C[把值取出,指派給變數]
C --> D[執行程式碼]
D --> E[for 移到range下一個值]
E --> B
B ---->|True| F[離開迴圈]
for 與 range
產生1, 3, 5, 7, 9的數字,不包含10。
1
2
for i in range(1, 10, 2):
print(i)
1
3
5
7
9
產生5句Hello。
1
2
for i in range(5):
print("Hello")
Hello
Hello
Hello
Hello
Hello
list
list語法
[1, 3, 5, 7]
使用[],建立list。
1
2
data = [1, 3, 5, 7]
print(data, type(data)
[1, 3, 5, 7] <class 'list'>
list 與 for
以下二種程式碼執行結果都一樣。
1
2
3
data = [1, 3, 5, 7]
for i in data:
print(i)
1
3
5
7
1
2
for i in [1, 3, 5, 7]:
print(i)
1
3
5
7
list記憶體位址
Prerequisites:
-
id Prerequisites:
-
[C++ 指標陣列][2]
先前在id的文章中提到,英文大小寫字母、數字0-9、底線,為了節省記憶體空間,Python都會指向相同記憶體位址。
Python list的記憶體位址分配跟C++、Java不一樣。
由以下程式碼可以看出x變數、nums[0]、nums1、nums[2]、nums[3] 全指向同一個記憶體位址。
| [0] | 1 | [2] | [3] |
|---|---|---|---|
| 4370549520 | 4370549520 | 4370549520 | 4370549520 |
1
2
3
4
5
6
7
8
nums = [1, 1, 1, 1]
x = 1
print("address of nums = ", id(nums))
print("address of nums[0] = ", id(nums[0]))
print("address of nums[1] = ", id(nums[1]))
print("address of nums[2] = ", id(nums[2]))
print("address of nums[3] = ", id(nums[3]))
print("address of x = ", id(x))
address of nums = 4360423744
address of nums[0] = 4370549520
address of nums[1] = 4370549520
address of nums[2] = 4370549520
address of nums[3] = 4370549520
address of x = 4370549520
用C++的觀點是,建立一個指標陣列,指標就是記憶體位址,陣列中儲存的是記憶體位址。
1
2
3
4
5
6
int* array[4];
int var1 = 1;
array[0] = &var1;
array[1] = &var1;
array[2] = &var1;
array[3] = &var1;
記憶體位4370549520儲存「1」的數值。
4370549520 → 1
指標陣列儲存的是記憶體,陣列中的pointer都是1的address。
4360423744
[ 0 ][ 1 ][ 2 ][ 3 ]
[ pointer ][ pointer ][ pointer ][ pointer ]
[ &1 ][ &1 ][ &1 ][ &1 ]
[ 4370549520 ][ 4370549520 ][ 4370549520 ][ 4370549520 ]
而nums則是指向指標陣列[0]的記憶體位址4360423744,指標陣列[0]儲存的內容是1的記憶體位址4370549520。