python3 列表解析与generator生成器

t = [1,2,3,4]
print(t)
t = [x+10 for x in t]
print(t)

t = [x+10 for x in range(10)]
print(t)

输出为:

如代码所示的两种列表解析的情况:

第一种,先创建了一个list对象[],在in后面接这个list对象

第二种,直接在in后面接一个range对象

共同点,in后面的,都是可以迭代的对象。

总结,列表解析的格式为(不考虑列表解析外部的函数或者符号):

关于x的式子(一般就是x自身)      for      x        in        可迭代对象

还可以在后面加if判断:

关于x的式子(一般就是x自身)      for      x        in        可迭代对象         if          布尔表达式

形如:


根据,列表解析,外部的函数或符号来判断返回的类型:

1.如果外部是(),即小括号。那么返回生成器generator(注意,此对象也是可以迭代的对象)



2.如果外部是list(),或者[],即中括号。那么返回list列表。



3.如果外部是tuple(),那么返回的是tuple元祖。


4.如果外部是set(),或者是{},其没有使用冒号,那么返回的是set集合。



5.如果外部是dict{},那么返回的是dict字典。


列表解析用于文件

1.第一种:使用生成器,再使用next方法

g=(x for x in open('test.txt',encoding='utf-8'))
next(g)


当然,你可以用for循环来使用这个生成器:

g=(x for x in open('test.txt',encoding='utf-8'))
for line in g:
    print(line)

这样,你就不用担心出现stopiteration的错误了。输出为:


因为每个line最后面是\n,所以输出结果之间有空行。

2.第二种,使用list列表

g=[x for x in open('test.txt',encoding='utf-8')]
print(g)

因为list已经一次性把文本的内容,按行存起来了,所以可以直接打印。而上一种情况,则需要手动迭代,或者用for循环来迭代。而直接print生成器是没有意义的。


猜你喜欢

转载自blog.csdn.net/anlian523/article/details/80501697