Python入门笔记(7)_ 列表的生成及表格的生成

时间:2022-03-27 06:06:27

列表的生成

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>'
运行结果:

Python入门笔记(7)_ 列表的生成及表格的生成
注:字符串可以通过 % 进行格式化,用指定的参数替代 %s。字符串的join()方法可以把一个 list 拼接成一个字符串。把打印出来的结果保存为一个html文件,就可以在浏览器中看到效果了