生成式可以依照規模產生資料,接著將資料儲存在串列、字典與集合內。
若要生產一個串列有5個數字,而5個數字分別是「1、2、3、4與5」,我們可以使用以下方式產生這個串列。
a = []
a.append(1)
a.append(2)
a.append(3)
a.append(4)
a.append(5)
或者使用for迴圈也可以產生此串列。
a = []
for i in range(1,6):
a.append(i)
Python提供另一種產生的方式為生成式(comprehension),比較符合Python的風格,串列生成式的語法為「[運算式 for 元素 in 可迭代的物件]」,使用「[]」表示為串列,可迭代的物件式tuple、串列、字串、字典與函式range等,剛才範例使用生成式改寫後如下。
[x for x in range(1,6)]
前後使用「[]」代表是串列,這行程是可以產生一個串列,串列有5個數字,5個數字分別是「1、2、3、4與5」。
生成式也可以加上條件判斷,加上條件判斷的串列生成式格式為「[運算式 for 元素 in 可迭代的物件 if 條件判斷]」。
產生一個串列,該串列元素為1到10的所有奇數數字,使用生成式可以寫成以下程式。
[x for x in range(1,11)if x%2 == 1]
生成式也可以包含另一個生成式,前面生成式執行一次,後面接的生成式要執行完畢,形成巢狀生成式,巢狀生成式的格式為「運算式 for 元素1 in 可迭代的物件1 for 元素2 in 可迭代的物件2」。
以下程式會執行九九乘法表,串ㄎ列每一個元素都式tuple,紀錄九九乘法表的被乘、乘數與積的結果。
[(i,j,i*j) for i in range(1,10) for j in range(1,10)]
python中沒有tuple的生成式,可以使用「(運算式 for 元素 in 可迭代的物件)」製作產生器(generator),這不是tuple生成式,使用「()」表示為產生器。例如:製作1到10的奇數產生器,產生器為「(num for num in range(1,10)if(nu,%2) == 1」,產生器只能執行一次,執行第二次產生任何值,以下來看個範例
#input
odd = (num for num in range(1,10) if (num%2)==1)
print(odd)
for num in odd:
print(num)
for num in odd:
print(num)
#output
<generator object <genexpr> at 0x00000273811DA8C8>
1
3
5
7
9
#第二次的「for num in odd:
# print(num)不會輸出任何資料,因為產生器只能使用一次
以上是今天迴圈與生成式的介紹,
明天會給大家更多例題練習喔!!