【python】推导式基本结构

文章目录

  • 条件推导式
  • 列表推导式
  • 字典推导式
  • 集合推导式
  • 生成器推导式


条件推导式

假设需要判断闰年,用if else来实现:

year = 600

if year % 4 == 0 and year % 100 != 0 or year % 400 == 0:
    print("闰年")
else:
    print("平年")
    
# 执行结果:
平年

python为我们提供了一种更加简便的方式:条件推导式

基本结构:表达式 if 筛选条件 else 分支表达式

year = 600

print("闰年") if year % 4 == 0 and year % 100 != 0 or year % 400 == 0 else print("平年")

# 执行结果:
平年

如果满足if 筛选条件则执行表达式,否则执行分支表达式


列表推导式

假设需要生成一个列表,用for循环来实现:

list1 = []
for i in range(6):
    list1.append(i)
print(list1)

# 执行结果:
[0, 1, 2, 3, 4, 5]

我们同样有一种方法可以用一行代码来实现它:列表推导式

基本结构: [表达式 for 变量 in 序列]

序列可以是 range 区间、元组、列表、字典和集合等数据类型。

list1 = [i for i in range(6)]
print(list1)
    
# 执行结果:
[0, 1, 2, 3, 4, 5]

除了这种最基本形式以外,列表推导式还有下面这两种结构:

1、[表达式 for 变量 in 序列 if 筛选条件]

list1 = [i // 2 for i in range(10) if i % 2 == 0]
print(list1)
    
# 执行结果:
[0, 1, 2, 3, 4]

if 筛选条件 对推导式中 for 变量 in 列表 遍历的结果经行筛选,最后执行表达式

用for循环来写:

list1 = []
for i in range(10):
    if i % 2 == 0:
        list1.append(i // 2)
print(list1)

# 执行结果:
[0, 1, 2, 3, 4]

2、[表达式 if 筛选条件 else 分支表达式 for 变量 in 序列]

ist1 = [i * 100 if i % 2 == 0 else i * 10 for i in range(10)]  # 用if else 生成不同元素
print(list1)

# 执行结果:
[0, 10, 200, 30, 400, 50, 600, 70, 800, 90]

用for循环来写:

list1 = []
for i in range(10):
    if i % 2 == 0:  # 偶数
        list1.append(i * 100)
    else:  # 奇数
        list1.append(i * 10)
print(list1)

# 执行结果:
[0, 10, 200, 30, 400, 50, 600, 70, 800, 90]

字典推导式

基本结构:

{key : value for 变量 in 序列}

{key : value for 变量 in 序列 if 筛选条件}

{key : value if 筛选条件 else 分支表达式 for 变量 in 序列}

key1 = ("姓名", "年龄", "爱好")
value1 = ("千寻", "10", "跳舞")

dict1 = {key: value for key, value in zip(key1, value1 )}  # 如果序列的元素是键值对,可以一次传两个变量

print(dict1)

# 执行结果:
{'姓名': '千寻', '年龄': '10', '爱好': '跳舞'}

集合推导式

基本结构:

{表达式 for 变量 in 序列}

{表达式 for 变量 in 序列 if 筛选条件}

{表达式 if 筛选条件 else 分支表达式 for 变量 in 序列}

list1 = [1, 2, 2, 1]

set1 = {i ** 2 for i in list1}  # 集合特征:确定性、互异性、无序性
print(set1)

# 执行结果:
{1, 4}

生成器推导式

基本结构:

(表达式 for 变量 in 序列)

(表达式 for 变量 in 序列 if 筛选条件)

(表达式 if 筛选条件 else 分支表达式 for 变量 in 序列)

generator1 = (i * 10 for i in range(6))

print(generator1)
print(list(generator1))

# 执行结果:
<generator object <genexpr> at 0x000001D7C29CDC10>
[0, 10, 20, 30, 40, 50]

生成器推导式返回的结果是一个生成器对象,如果我们需要得到其中的元素,可以根据需要转换为对应的序列类型,如列表、元组等。

你可能感兴趣的:(python,开发语言)