元组推导式:
(out_exp_res for item in Sequence)
(out_exp_res for item in Sequence if conditional)
- out_exp_res: 生成元素表达式,可以是由返回值的函数;
- for item in Sequence: 迭代Sequence 将 item 传入到 out_exp_res 表达式中;
- if conditional: 条件语句,可以过滤Sequence中不符合条件的值;
# 简单的元组推导式
t1 = (x for x in range(1,10))
# 生成128位ASCII码元组
t2 = (chr(x) for x in range(128))
# 生成100以内能被7整除所有数字的元组
t3 = (x for x in range(100) if x%7==0)
# 生成99乘法表结果元组
t4 = (x*y for x in range(1,10) for y in range(1, x+1))
words = ["apple", "banana", "cherry"]
upper_words = (word.upper() for word in words)
列表推导式:
[out_exp_res for item in Sequence ]
[out_exp_res for item in Sequence if conditional ]
out_exp_res
:生成元素表达式,可以是有返回值的函数;for item in Sequence
:迭代 Sequence 将 item 传入到 out_exp_res 表达式中;if condition
:条件语句,可以过滤Sequence中不符合条件的值;
# 简单的列表推导式
l1 = [x for x in range(1,10)]
# 生成128位ASCII码元组
l2 = [chr(x) for x in range(128)]
# 生成100以内能被7整除所有数字的列表
l3 = [x for x in range(100) if x%7==0]
# 生成99乘法表结果列表
l4 = [x*y for x in range(1,10) for y in range(1, x+1)]
# 将列表中的字符串转换为大写
words = ["apple", "banana", "cherry"]
upper_words = [word.upper() for word in words]
字典推导式:
字典推导式与前两种推导式的区别
- 推导式使用花括号包裹
- 结果表达式需要使用 key-value 形式
{ key_expr: value_expr for value in collection }
{ key_expr: value_expr for value in collection if condition }
names = ['Bob','Tom','alice','Jerry','Wendy','Smith']
# 将列表中各字符串值为键,各字符串的长度为值,组成键值对
newdict = {name:len(name) for name in names}
集合推导式
集合推导式与字典推导式的区别在于结果表达式是单一结果,不是key-value形式。
集合推导式基本格式:
{ expression for item in Sequence } 或 { expression for item in Sequence if conditional }
data = ['Bob','123','Tom','ab123','alice','123abc','Jerry','456','Wendy','554','Smith']
# 筛选列表中的数字字符串
newset = {n for n in data if n.isdigit()}
推导式的优点
- 简洁高效:推导式允许在一行代码中完成复杂的生成操作,避免了使用显式的循环和临时变量的繁琐过程。这样可以大大减少代码量,并提高编码效率。
- 可读性好:推导式使用简洁的语法,将迭代、条件判断和表达式结合在一起,使得代码更加紧凑和易于理解。它提供了一种清晰、直观的方式来表达列表生成的逻辑,使得代码更加可读性强,降低了出错的可能性。
- 灵活性强:推导式非常灵活,可以根据需要添加条件判断、多个迭代变量和嵌套结构,以满足不同的需求。这使得推导式适用于各种场景,从简单的数据转换到复杂的筛选和操作,都可以通过简单而直观的语法实现。
总的来说,推导式提供了一种简洁高效、可读性好和灵活性强的方法来处理列表数据。它是Python中强大而常用的特性之一,为开发者提供了更好的编码体验和效率。