Python表达式与生成式

前言

  本章节中的所有知识点均为在不丧失代码可读性的前提下最大程度精简代码的一系列操作。其中涉及到一些性能问题(微乎其微)可以不做考虑。

三元表达式

  三元表达式中有三个重要的元素:

    1.条件是第一元素   

    2.条件成立返回的值是第二元素   

    3.条件不成立返回的值是第三元素

def func(x,y):
if x > y:
return "条件成立"
else:
return "条件不成立"

res1 = func(1,2)
print(res1)


# ==== 三元表达式 ====

x = 1
y = 2

# 条件成立后返回的值放在第一位,条件放在第二位,条件不成立后返回的值放在第三位
res2 = "条件成立" if x > y else "条件不成立"
print(res2)

# ==== 执行结果 ====

"""
条件不成立
条件不成立
"""

列表生成式

  应用场景:

# 需求:提取出列表l中以 male 结尾的元素

l = ["Yunya-male", "Jack-male", "Cuihua-Female", "Mary-Female", "Laura-Female", "Tom-male"]
new_l = []
for name in l:
if name.endswith("-male"):
new_l.append(name)
print(new_l)

# ==== 列表生成式 ====

# 第一位放需要添加的元素。中间放迭代变量,最后放if条件。只有if条件成立后迭代变量才会被添加至新列表中
new_l2 = [name for name in l if name.endswith("-male")]
# new_l2 = [name for name in l if name.endswith("-male") else "x"] # 注意不能跟else,不符合条件的迭代变量将会被直接舍弃

print(new_l2)

# ==== 执行结果 ====

"""
['Yunya-male', 'Jack-male', 'Tom-male']
['Yunya-male', 'Jack-male', 'Tom-male']
"""

  如何快速掌握列表生成式:

# 在列表生成式中,也可以将成功返回的结果做一些处理。

l = [str(i) for i in range(10) if i > 5]
print(l)

# 怎么样读懂列表生成式?

# 1:先看循环后面的代码 for i in range(10) if i > 5。看看要循环几次
# 2:再看前面代码 str(i) ,看看要生成什么值。

# ==== 执行结果 ====

"""
['6', '7', '8', '9']
"""

  注意:列表生成式与range()的迭代变量没有任何关系:

# 需求:生成一个列表,里面包含8个值为15的元素

l = [15 for i in range(8)] # 可以看到迭代变量i与条件成立后添加值没有任何关系。

字典生成式

# 1.可以设定默认的value值

dic1 = {i:"value" for i in range(10) if i > 5}
print(dic1)

# 2.对于迭代一些特殊格式的容器。可以直接生成出字典

items = [("name","Yunya"),("age",18),("gender","male")]
dic2 = {k:v for k,v in items}
print(dic2)

# ==== 执行结果 ====

"""
{6: 'value', 7: 'value', 8: 'value', 9: 'value'}
{'name': 'Yunya', 'age': 18, 'gender': 'male'}
"""

集合生成式

# 1.字典生成式不要 :value 就是集合生成式

li = ["a","b","a","b","c","d","d","e"]
set1 = {i for i in li}
print(set1)

# ==== 执行结果 ====

"""
{'a', 'b', 'c', 'e', 'd'}
"""

生成器表达式

# 生成器表达式和列表生成式使用方式一样。只是符号不一样,一个是[],一个是()

g = (i for i in range(10) if i > 5)
print(g)
print(g.__next__())
print(g.__next__())
print(g.__next__())

# ==== 执行结果 ====

"""
<generator object <genexpr> at 0x0000023A84B9E350>
6
7
8
"""

  应用场景:

# 统计文件中的字符个数

# === 方式1 ===

with open(file="计算机硬件基础.text",mode="rt",encoding="utf-8") as f:
res1 = 0
for line in f:
res1 += len(line)
print(res1)

# === 方式2 ===

# sum()是内置函数,接收一个可迭代对象。将其中元素进行迭代以进行累加操作

with open(file="计算机硬件基础.text",mode="rt",encoding="utf-8") as f:
res2 = sum(len(line) for line in f) # 如果是将生成器表达式作为参数传递给另一个函数,可以不用套括号。
print(res2)

# ==== 执行结果 ====

"""
959
959
"""

扩展:为何没有元组生成式

  元组本身就是不可变类型,对比列表生成式,它的工作原理其实就是迭代一个可迭代对象然后使用append()进行添加元素。由于元组是不可变类型故不能尝试改变其本身容器中元素的个数。

Python表达式与生成式的更多相关文章

  1. Python 函数递归-三元表达式-列表生成式-字典生成式-匿名函数-内置函数

    上节课复习: 1. 无参装饰器 def 装饰器名字(func): def wrapper(*args,**kwargs): res = func(*args,**kwargs) return res ...

  2. python之三元表达式与生成式与匿名与内置函数(部分)

    目录 三元表达式 各种生成式 列表生成式(可同样作用于集合) 字典生成式 匿名函数 重要内置函数 map() zip() filter() reduce() 常见内置函数(部分) 三元表达式 三元表达 ...

  3. 【转】Python之列表生成式、生成器、可迭代对象与迭代器

    [转]Python之列表生成式.生成器.可迭代对象与迭代器 本节内容 语法糖的概念 列表生成式 生成器(Generator) 可迭代对象(Iterable) 迭代器(Iterator) Iterabl ...

  4. python基础——列表生成式

    python基础——列表生成式 列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式. 举个例子,要生成list [1, 2, 3, 4 ...

  5. 一、Python表达式基础

    Python 能执行简单的计算器的功能: 如>>2+2 ==> 4,1/2==>0.5或者这样写1/2.0==>0.5(取浮点型) 1//2 ==>0 (" ...

  6. Python 表达式 i += x 与 i = i + x 等价吗?

    Python 表达式 i += x 与 i = i + x 等价吗? 看个例子 a = [1, 2, 3] b = a # 写法一 b += [4] # 写法二 # b = b + [4] print ...

  7. python基础----列表生成式、生成器表达式

    结论: 1.把列表解析的[]换成()得到的就是生成器表达式 2.列表解析与生成器表达式都是一种便利的编程方式,只不过生成器表达式更节省内存 3.Python不但使用迭代器协议,让for循环变得更加通用 ...

  8. Python基础-列表生成式和生成器表达式

    一.列表生成式(List Comprehension) 列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式. 举个例子,要生成list ...

  9. python 之 列表生成式、生成器表达式、模块导入

    5.16 列表生成式 l=[]for i in range(100):    l.append('egg%s' %i)print(l)​l=['egg%s' %i for i in range(100 ...

随机推荐

  1. vc程序设计--图形输出3

    // 实验2.cpp : 定义应用程序的入口点. // #include "framework.h" #include "实验2.h" #define MAX_ ...

  2. Cypress系列(6)- Cypress 的重试机制

    如果想从头学起Cypress,可以看下面的系列文章哦 https://www.cnblogs.com/poloyy/category/1768839.html 前言 重试(Retry-ability) ...

  3. 总结了一下css的部分基础知识点。---css学习笔记01

    一. css基础 1. 什么是css 层叠样式表:层叠 2. css的三种使用方式 style 属性 --> <div style="css属性值"></d ...

  4. SpringBoot 定制 starter 启动器

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 在实际项目开发中,我们常常会用到各种各样的 starter,这些starter 有的是有 springb ...

  5. 用python实现汉诺塔问题

    一.用动画实现汉诺塔问题: import turtle class Stack: def __init__(self): self.items = [] def isEmpty(self): retu ...

  6. java实现圆周率

    我国古代数学家对圆周率方面的研究工作,成绩是突出的.三国时期的刘徽.南北朝时期的祖冲之都在这个领域取 得过辉煌战绩. 有了计算机,圆周率的计算变得十分容易了.如今,人们创造了上百种方法求π的值.其中比 ...

  7. Java实现第九届蓝桥杯测试次数

    测试次数 题目描述 x星球的居民脾气不太好,但好在他们生气的时候唯一的异常举动是:摔手机. 各大厂商也就纷纷推出各种耐摔型手机.x星球的质监局规定了手机必须经过耐摔测试,并且评定出一个耐摔指数来,之后 ...

  8. 剑指Offer之和为S的连续正数序列

    题目描述 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100.但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数).没多久,他 ...

  9. EasyARM-iMX257如何配置出低速率CAN

    EasyARM-iMX257如何配置出低速率CAN 在EasyARM-iMX257 Linux开发指南 V1.02.01"5.6 socket CAN编程socket CAN编程" ...

  10. 8000字长文让你彻底了解 Java 8 的 Lambda、函数式接口、Stream 用法和原理

    我是风筝,公众号「古时的风筝」.一个兼具深度与广度的程序员鼓励师,一个本打算写诗却写起了代码的田园码农! 文章会收录在 JavaNewBee 中,更有 Java 后端知识图谱,从小白到大牛要走的路都在 ...