python3 三元表达式列表解析

三元表达式

三元表达式是if…else的简写版本:
x=1
y=2
res=x if x>y else y # 三元表达式,True则返回左边的值,False则返回右边的值
print(res)

列表解析

列表解析用于快速生成列表,可以简洁代码:

l=[i for i in range(10)]
print(l)

l=[‘book%s’ %i for i in range(10) if i>5 if i<7]
print(l)

对旧的列表做计算处理,如计算平方:

l=[1, 2, 3, 4, 5]
l2=[items2 for items in l if items2 <16]
print(l2)

对列表的值做过滤:

l=[‘book1′,’book2′,’book3′,’pc’,’iphone’]
l2=[i for i in l if i.startswith(‘book’)]
print(l2)

生成器表达式

生成器表达式主要用于生成一个迭代器,如:
l=[‘book1′,’book2′,’book3′,’pc’,’iphone’]
l2=(i for i in l if i.startswith(‘book’))
print(next(l2))
print(next(l2))
print(next(l2))

将列表的中括号[]改为圆括号()就是一个生成器表达式。这主要用于处理大文件和无穷列表问题。
如对文件内容进行遍历,查找出最长的一行的长度:
with open(‘a.txt’,encoding=’utf-8′) as f:
g=max(len(i) for i in f) # max函数内置next方法,可以遍历迭代器中值,有多层圆括号时,迭代生成器的括号可以省略
print(g)

可以直接计算列表和生成器的值:
print(sum([1,2,3])) # 对列表值求和
print(sum(i for i in range(4))) # 对生成器求和

如对文件中相关数据进行求和操作:
文件a.txt的内容为:
a 100 5
b 20 100
c 5000 2
d 10000 3

如果第二列为单价,第三列为数量,求总金额:
with open(‘a.txt’,encoding=’utf-8′) as f:
g=(float(i.split()[1])*int(i.split()[2]) for i in f)
print(sum(g))

同样是上面的文本内容,可以进行格式化,并完成筛选操作:
with open(‘a.txt’,encoding=’utf-8′) as f:
g=[{‘name’:i.split()[0],’price’:float(i.split()[1]),’count’:int(i.split()[2])} for i in f if float(i.split()[1]) > 1000]
print(g)