Python3 三元表达式、列表推导式、生成器表达式
- 三元表达式
表达式中,有三个元素
name = input("请输入姓名: ")
ret = '输入正确' if name == 'aaa' else '输入错误'
print(ret)
- 列表推导式
#1、示例
# 方法1
egg_list1 = []
for i in range(10):
egg_list1.append('鸡蛋%s' % i)
print(egg_list1) #方法2
egg_list2 = ['鸡蛋%s' %i for i in range(10)]
print(egg_list2)#2、语法
[expression for item1 in iterable1 if condition1
for item2 in iterable2 if condition2
...
for itemN in iterableN if conditionN
]
类似于
ret=[]
for item1 in iterable1:
if condition1:
for item2 in iterable2:
if condition2:
...
for itemN in iterableN:
if conditionN:
ret.append(expression) #3、有点:方便,改变了编程习惯,可称之为声明式编程。
- 生成器表达式
#1、把列表推导式的[]换成()就是生成器表达式 #2、示例:生一筐鸡蛋变成给你一只老母鸡,用的时候就下蛋,这也是生成器的特性
chicken = ('鸡蛋%s' %i for i in range(5))
print(chicken) #<generator object <genexpr> at 0x0000020910EAFF68> print(next(chicken)) #鸡蛋0
print(list(chicken)) ['鸡蛋1', '鸡蛋2', '鸡蛋3', '鸡蛋4'] #3、优点省内存,一次只产生一个值在内存中
- 练习:
#将列表中的名字全部变大写names=['lily','hanmeimei_hr','lilei','bob']names = [name.upper() for name in names]
print(names)
#将列表中以hr结尾的名字过滤掉,然后保存剩下的名字长度
names=['lily','hanmeimei_hr','lilei','bob'] names=[len(name) for name in names if not name.endswith('hr')]
print(names)
# 求文件a.txt中最长的行的长度(长度按字符个数算,需要使用max函数)
with open('a.txt' ,encoding='utf-8') as f:
print(max(len(line) for line in f ))
# 求文件a.txt中总共包含的字符个数?思考为何在第一次之后的n次sum求和得到的结果为0?(需要使用sum函数)
with open('a.txt', encoding='utf-8') as f:
print(sum(len(line) for line in f))
print(sum(len(line) for line in f)) #求包换换行符在内的文件所有的字符数,为何得到的值为0?
print(sum(len(line) for line in f)) #求包换换行符在内的文件所有的字符数,为何得到的值为0?