码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2018-12-03 16:32:09      阅读:170      评论:0      收藏:0      [点我收藏+]

标签:family   pen   ble   open   就是   方法   保存   enc   ext   

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 三元表达式、列表推导式、生成器表达式

标签:family   pen   ble   open   就是   方法   保存   enc   ext   

原文地址:https://www.cnblogs.com/yujiaershao/p/10059015.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!