列表推导式的英文(list cmprehension)是Python独有的一种语法结构,它将推导式(又称解析式)得到的各个结果组成一个新个列表,是一种非常简洁的创建列表的语法,适用于所有需要列表的场景。语法格式如下:
[表达式 for 迭代变量 in 可迭代对象 [if 条件表达式]]
for 循环代码
>>> list_1 = ['a', 'b', 'c']
>>> list_2 = []
>>> for i in list_1:
>>> list_2.append(i * 2)
>>> print(list_2)
['aa', 'bb', 'cc']
列表推导式写法
>>> list_1 = ['a', 'b', 'c']
>>> list_2 = [i * 2 for i in list_1]
>>> print(list_2)
['aa', 'bb', 'cc']
# 若不想取list_1列表中的全部元素,可用if语句做过滤条件,可迭代变量也可用于if语句中
>>> list_2 = [i * 2 for i in list_1 if i != 'b']
>>> print(list_2)
['aa', 'cc']
>>> list_1 = [(m, n) for m in range(3) for n in range(3)]
>>> print(list_1)
[(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]
多层for循环一样支持if语句
>>> list_1 = [(m, n) for m in range(3) if m > 1 for n in range(3) if n > 1]
>>> print(list_1)
[(2, 2)]
>>> list_1 = [(m, n) for m in range(3) if m > 1 for n in range(3)]
>>> print(list_1)
[(2, 0), (2, 1), (2, 2)]
>>> list_1 = [(m, n) for m in range(3) for n in range(3) if m > 1 and n > 1]
>>> print(list_1)
[(2, 2)]
>>> list_1 = [n + 2 for n in [m + 1 for m in range(3)]]
>>> print(list_1)
[3, 4, 5]
字典推导式的概念与列表推导式一样,只不过返回的结果是字典。语法格式如下:
{键:值 for 迭代变量 in 可迭代对象 [if 条件表达式]}
注意:字典中不能出现同名的 key,第二次出现就把第一个值覆盖掉了,因此 value 都是 1
>>> dict_1 = {key: value for key in range(3) for value in range(2)}
>>> print(dict_1)
{0: 1, 1: 1, 2: 1}
>>> dict_1 = {key: value for key in range(3) for value in range(3)}
>>> print(dict_1)
{0: 2, 1: 2, 2: 2}
常用场景,遍历一个具有键值关系的可迭代对象
>>> tuple_list = [('name', '张三'), ('age', 28),('class', '9701'), ('like', 'python')]
>>> dict_1 = {key: value for key, value in tuple_list}
>>> print(dict_1)
{'name': '张三', 'age': 28, 'class': '9701', 'like': 'python'}
与列表和字典推导式不同的是它不是返回一个元组,而是返回一个生成器对象,也可以叫生成器推导式,示例如下:
>>> tuple_1 = (i for i in range(5))
>>> print(tuple_1)
<generator object <genexpr> at 0x000002097F25F1D0>
并没有像我们想像的那样返回(0, 1, 2, 3, 4)这样的元组,若需返回元组加上转换函数即可:
>>> tuple_1 = (i for i in range(5))
>>> print(tuple(tuple_1))
(0, 1, 2, 3, 4)
集合推导式需要注意的是,集合是无序的,在使用时会自动去掉重复的元素。
>>> set_1 = {i for i in 'HelloWorld'}
>>> print(set_1)
{'d', 'W', 'e', 'r', 'o', 'H', 'l'}
Python中没有像C或Java语言中的三元表达式(三目运算符)的概念,但也有类似的语法,格式如下:
if条件为True执行语句 if 条件表达式 else if条件为False执行语句
# 原 if 语句
age = 30
if age >= 18 :
rs = "成年"
else:
rs = "未成年"
# 使用三元表达式
age = 30
rs = "成年" if age >= 18 else "未成年"
age = 30
rs = "成年", "大于18岁" if age >= 18 else "未成年"
print(rs)
def e_num(num):
return True if num % 2 == 0 else False
# 返回两个数的最大值
>>> max = lambda a, b: a if a > b else b
>>> print(max(10, 15))
15
>>> print(max(88, 15))
88