python 推导式
推导式说明
推导式(Comprehensions)是Python中一种非常有用和灵活的工具,允许以简洁的方式从一个或多个迭代器快速创建数据结构。Python支持的推导式主要有四种:列表(List)推导式、字典(Dictionary)推导式、集合(Set)推导式和生成器(Generator)推导式。
列表推导式
用途:快速生成列表。
语法:[返回值 for 元素 in 可迭代对象 if 条件]
返回值:返回一个新的列表
示例
#生成0到9每个数的平方,只包括偶数
#推导式写法
squared_evens = [x**2 for x in range(10) if x % 2 == 0]
print(squared_evens)
#普通写法
squared_evens = []
for x in range(10):
if x % 2 == 0:
squared_evens.append(x**2)
print(squared_evens)
# 输出结果
[0, 4, 16, 36, 64]
# 打印九九乘法表。
#推导式写法
[print(' '.join(f"{i}*{j}={i * j:2}" for j in range(1, i + 1))) for i in range(1, 10)]
#普通写法
for i in range(1, 10):
for j in range(1, i+1):
print(f"{j}x{i}={i*j:2}", end="\t")
print()
# 输出结果
1x1= 1
1x2= 2 2x2= 4
1x3= 3 2x3= 6 3x3= 9
1x4= 4 2x4= 8 3x4=12 4x4=16
1x5= 5 2x5=10 3x5=15 4x5=20 5x5=25
1x6= 6 2x6=12 3x6=18 4x6=24 5x6=30 6x6=36
1x7= 7 2x7=14 3x7=21 4x7=28 5x7=35 6x7=42 7x7=49
1x8= 8 2x8=16 3x8=24 4x8=32 5x8=40 6x8=48 7x8=56 8x8=64
1x9= 9 2x9=18 3x9=27 4x9=36 5x9=45 6x9=54 7x9=63 8x9=72 9x9=81
result = [(i,j) for i in range(7) for j in range(20,25) if i>4 and j>23]
# 普通写法
result = []
for i in range(7):
for j in range(20, 25):
if i > 4 and j > 23:
result.append((i, j))
# 输出结果
[(5, 24), (6, 24)]
["{:04}.{}".format(i,"".join([chr(random.randint(97,122)) for j in range(10)])) for i in range(10)]
# 普通写法
result_list = []
for i in range(10):
random_string = ""
for j in range(10):
random_character = chr(random.randint(97, 122))
random_string += random_character
formatted_string = "{:04}.{}".format(i, random_string)
result_list.append(formatted_string)
print(result_list)
# 输出结果
['0000.zazvpobugw', '0001.xzwrgoiumx', '0002.klhgtboqll', '0003.voyrwbggrn', '0004.jumetngmuz', '0005.xxwxersszt', '0006.txphxctdsq', '0007.kxklliexjf', '0008.wekigtlifi', '0009.wisemnokrh']
字典推导式
用途:快速生成字典。
语法:{返回值 for 元素 in 可迭代对象 if 条件}
返回值:立即返回一个字典
示例
# 将单词列表转换为字典,其中键是单词,值是单词的长度。
# 推导式写法
words = ["apple", "banana", "cherry"]
word_lengths = {word: len(word) for word in words}
普通写法
words = ["apple", "banana", "cherry"]
word_lengths = {}
for word in words:
word_lengths[word] = len(word)
# 输出结果
{'apple': 5, 'banana': 6, 'cherry': 6}
集合推导式
用途:快速生成集合。
语法:{返回值 for 元素 in 可迭代对象 if 条件}
返回值:立即返回一个集合
示例
# 生成一个包含0到9内所有偶数的集合。
# 推导式写法
evens = {x for x in range(10) if x % 2 == 0}
# 普通写法
evens = set()
for x in range(10):
if x % 2 == 0:
evens.add(x)
# 输出
{0, 2, 4, 6, 8}
生成器推导式
用途:创建一个生成器,用于按需生成项目,节省内存。
语法:(返回值 for 元素 in 可迭代对象 if 条件)
返回值:返回一个生成器
示例
# 创建一个生成器,生成0到9的每个数字的平方。
# 推导式写法
squared_numbers = (x**2 for x in range(10))
# 普通写法
def squared_numbers_generator():
for x in range(10):
yield x**2
squared_numbers = squared_numbers_generator()