三元表达式
三元表达式是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=[items**2 for items in l if items**2 <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)
输出结果:
[{'name': 'c', 'price': 5000.0, 'count': 2}, {'name': 'd', 'price': 10000.0, 'count': 3}]