python的各种推导式(列表推导式、字典推导式、集合推导式)

推导式 comprehensions(又称解析式),是 python 的一种独有特性。推导式是可以从一个数据序列构建另一个新的数据序列。

1.列表推导式

语法:

  • 变量名 = [表达式 for 变量 in 列表 for 变量 in  xxx]
  • 变量名 = [表达式 for 变量 in 列表 if 条件]

语义:

  • 遍历出列表中的内容给变量,表达式根据变量值进行逻辑运算。或者遍历列表中的内容给变量,然后进行判断,符合的值在给表达式。

练习1:快速创建一个包含元素1-10的列表

list1 = [i for i in range(1, 11)]
print(list1) # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

练习2:快速创建一个包含1-10之间所有偶数的列表

list1 = [i for i in range(1, 11) if i % 2 == 0]
print(list1) # [2, 4, 6, 8, 10]

练习3:现在有一列表 lst = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] ,求出 1/4/7 和 1/5/9元素,思考如何取出

lst = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
list1 = [lst[i][0] for i in range(len(lst))]
print(list1) # [1, 4, 7]

list2 = [lst[i][i] for i in range(len(lst))]
print(list2) # [1, 5, 9]

2.字典推导式

  • 字典推导式列表推导式思想的延续,语法差不多,只不过产生的是字典而已。

练习1:大小写key合并

mcase = {'a': 10, 'b': 34, 'A': 7, 'Z': 3}
mcase_frequency = {
    k.lower(): mcase.get(k.lower(), 0) + mcase.get(k.upper(), 0)
    for k in mcase.keys()
    if k.lower() in ['a','b']
}
print(mcase_frequency) # {'a': 17, 'b': 34}

练习2:快速更换key和value

mcase = {'a': 10, 'b': 34}
mcase_frequency = {v: k for k, v in mcase.items()}
print(mcase_frequency)  # {10: 'a', 34: 'b'}

3集合推导式

  • 集合推导式跟列表推导式非常相似,唯一区别在于用 { } 代替 [ ]

练习1:

squared = {x**2 for x in [1, 1, 2]}
print(squared) # {1, 4}  集合去重复
原文地址:https://www.cnblogs.com/heyuling/p/13431912.html