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生成器是没有意义的。