列表生成式和生成器

要生成[1x1, 2x2, 3x3, ..., 10x10]怎么做:

l=[x*x for x in range(1,10)]
print (l)

E:\python36\python3.exe E:/pj/test/test.py
[1, 4, 9, 16, 25, 36, 49, 64, 81]

列表生成式里还可以增加判断语句

取偶数的平方

l=[x*x for x in range(1,10) if x%2==0]
print (l)

E:\python36\python3.exe E:/pj/test/test.py
[4, 16, 36, 64]

 偶数取平法,奇数不变:

l=[x*x if x%2==0 else x for x in range(1,10)]
print (l)

E:\python36\python3.exe E:/pj/test/test.py
[1, 4, 3, 16, 5, 36, 7, 64, 9]

双层循环:

x为1到10的偶数,y为0或者1,它们所有可能的乘积:

l=[x*y for x in range(1,10) if x%2==0 for y in range(2)]
print (l)

E:\python36\python3.exe E:/pj/test/test.py
[0, 2, 0, 4, 0, 6, 0, 8]

字典通过items去遍历:

去生成一个html表格,名字和分数,分数低于60分的标红色

#-*-coding:utf-8-*-
d={'李强':80,'老王':40,'小明':70}
def get_html(td):
    print ("<table border='1'>")
    print ("<tr><th>name</th><th>score</th></tr>")
    for i in td:
        print (i)
    print ("</table>")
l=['<tr><td>{0}</td> <td>{1}</td></tr>'.format(name,score) if score>60 \
       else '<tr><td>{0}</td> <td style="color:red">{1}</td></tr>'.format(name,score) for name,score in d.items()]
get_html(l)

E:\python36\python3.exe E:/pj/test/test.py
<table border='1'>
<tr><th>name</th><th>score</th></tr>
<tr><td>李强</td> <td>80</td></tr>
<tr><td>老王</td> <td style="color:red">40</td></tr>
<tr><td>小明</td> <td>70</td></tr>
</table>

生成器(Generator)

列表生成式会受到内存限制占用很大的存储空间,这种一边循环一边计算的机制,称为生成器(Generator)。只要把列表生成式【】改成()就好了。超出迭代范围的时候就会抛出异常StopIteration。

d={'李强':80,'老王':40,'小明':70}
l=("{0}是{1}分".format(name,score) for name,score in d.items())
print(next(l))
print(next(l))
print(next(l))

E:\python36\python3.exe E:/pj/test/test.py
李强是80分
老王是40分
小明是70分

 

posted @ 2018-03-05 15:31  若爱以星光为牢  阅读(188)  评论(0编辑  收藏  举报