列表生成式
要生成list, 我們可以用range(x,y)
range(1, 11)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
我們還可以用列表生成式, 生成列表
[x * x for x in range(1, 11)]
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
復(fù)雜表達(dá)式
假設(shè)有如下的dict:
d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 }
完全可以通過一個(gè)復(fù)雜的列表生成式把它變成一個(gè) HTML 表格:
tds = ['<tr><td>%s</td><td>%s</td></tr>' % (name, score) for name, score in d.iteritems()]
print '<table>'
print '<tr><th>Name</th><th>Score</th><tr>'
print '\n'.join(tds)
print '</table>'
注:字符串可以通過 % 進(jìn)行格式化紧卒,用指定的參數(shù)替代 %s尊勿。字符串的join()方法可以把一個(gè) list 拼接成一個(gè)字符串瑞驱。
把打印出來的結(jié)果保存為一個(gè)html文件,就可以在瀏覽器中看到效果了:
<table border="1">
<tr><th>Name</th><th>Score</th><tr>
<tr><td>Lisa</td><td>85</td></tr>
<tr><td>Adam</td><td>95</td></tr>
<tr><td>Bart</td><td>59</td></tr>
</table>
條件過濾
列表生成式的 for 循環(huán)后面還可以加上 if 判斷
[x * x for x in range(1, 11) if x % 2 == 0]
[4, 16, 36, 64, 100]
有了 if 條件,只有 if 判斷為 True 的時(shí)候,才把循環(huán)的當(dāng)前元素添加到列表中
多層表達(dá)式
for循環(huán)可以嵌套,因此辣吃,在列表生成式中,也可以用多層 for 循環(huán)來生成列表芬探。
對于字符串 'ABC' 和 '123'神得,可以使用兩層循環(huán),生成全排列:
[m + n for m in 'ABC' for n in '123']
['A1', 'A2', 'A3', 'B1', 'B2', 'B3', 'C1', 'C2', 'C3']
翻譯成循環(huán)代碼就像下面這樣:
L = []
for m in 'ABC':
for n in '123':
L.append(m + n)