Python3 三元表达式列表推导式生成器表达式

Posted yujiaershao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python3 三元表达式列表推导式生成器表达式相关的知识,希望对你有一定的参考价值。

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?

 
















































以上是关于Python3 三元表达式列表推导式生成器表达式的主要内容,如果未能解决你的问题,请参考以下文章

三元表达式列表推导式生成器表达式递归匿名函数内置函数

三元表达式列表推导式生成器表达式递归匿名函数内置函数

Python:三元表达式列表推导式和生成器表达式

Python:三元表达式列表推导式和生成器表达式

六 三元表达式列表推导式生成器表达式

python——函数 20三元表达式列表推导式生成器表达式