1. 程式人生 > >Python入門筆記(7)_ 列表的生成及表格的生成

Python入門筆記(7)_ 列表的生成及表格的生成

列表的生成

range(x,y,z)函式我們已經在前面的學習中接觸過了,它最明顯的特點就是生成的序列的範圍是從 x 到 y-1 的,如果有 z,表示每隔 z 個值取一個。

我們現在來看看它更高階的用法。看下例:

print [(x-1)*x*(x+1) for x in range(2,100,3)]
這個語句表示生成 list [ 1x2x3, 4x5x6, 7x8x9,...., 97x98x99]。

我們再來看看,如何把條件過濾加入其中。

def toUppers(L):
    return [L[i].upper() for i in range(0,len(L)) if isinstance(L[i],str)]

print toUppers(['Hello', 'world', 101])

這段程式是把list中的所有字串變成大寫後返回,非字串元素將被忽略。其中,isinstance()來判斷 list 是否是字串型別。
輸出為 ['HELLO', 'WORLD']。

更高階的多層表達方式,如下例:

print [i + 10*j + 100*k for i in range(1,10) for j in range(0,10) for k in range(0,10) if k==i]

該程式利用 3 層for迴圈的列表生成式,找出對稱的 3 位數。

輸出為:[101, 111, 121, 131, 141, 151, 161, 171, 181, 191, 202, 212, 222, 232, 242, 252, 262, 272, 282, 292, 303, 313, 323, 333, 343, 353, 363, 373, 383, 393, 404, 414, 424, 434, 444, 454, 464, 474, 484, 494, 505, 515, 525, 535, 545, 555, 565, 575, 585, 595, 606, 616, 626, 636, 646, 656, 666, 676, 686, 696, 707, 717, 727, 737, 747, 757, 767, 777, 787, 797, 808, 818, 828, 838, 848, 858, 868, 878, 888, 898, 909, 919, 929, 939, 949, 959, 969, 979, 989, 999]。

表格的生成

先看例子,再解釋吧。

d = { 'Adam': 95, 'Lisa': 98, 'Bart': 100 }
def generate_tr(name, score):
    if score > 90:
        return '<tr><td>%s</td><td style="color:red">%s</td></tr>' % (name, score)
    return '<tr><td>%s</td><td>%s</td></tr>' % (name, score)
tds = [generate_tr(name, score) for name, score in d.iteritems()]
print '<table border="1">'
print '<tr><th>Name</th><th>Score</th><tr>'
print '\n'.join(tds)
print '</table>'
執行結果:


注:字串可以通過 % 進行格式化,用指定的引數替代 %s。字串的join()方法可以把一個 list 拼接成一個字串。把打印出來的結果儲存為一個html檔案,就可以在瀏覽器中看到效果了