列表字典推导式
-
意思
- 在列表里直接进行运算,结合for语句,将需要改变的元素 一个个遍历出来
- 可以快速存放新的结果数据,并且操作简单
-
语法
[表达式 for 迭代变量 in 可迭代对象 [if 条件表达式]] 运算程序+for i(需要进行运算的对象) in (一堆嗷嗷待哺的数据)list
-
应用
-
对列表的元素进行运算
test = [1, 2, 3] print([i * i for i in test]) # [1,4,9] print([[i, i + 2] for i in test]) # [[1,3],[2,4],[3,5]]
-
遍历每个元素–进行一样的操作
list=[' dog','cat ',' sleep '] list_new=[i.strip() for i in list] print(list_new) #['dog', 'cat', 'sleep']
-
里面不止一个遍历
list1=[1,2,3] list2=[4,5,5] list3=[x*y for x in list1 for y in list2] print(list3) #[4, 5, 5, 8, 10, 10, 12, 15, 15] list4=[[x*y,x+y] for x in list1 for y in list2] print(list4) #[[4, 5], [5, 6], [5, 6], [8, 6], [10, 7], [10, 7], [12, 7], [15, 8], [15, 8]]
-
实行行列转换
list1 = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]] list2=[[row[i] for row in list1] for i in range(len(tset[0])) print(list2) #[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]] #后面的for是说明i一共有四个数字,前面的for说明row遍历三次得到三个列表
-
加入判断语句–可以过滤数据
test = [1, 2, 3, 4, 5, 6] list_one = [x for x in test if x % 2 == 0] print(list_one) # [2, 4, 6] list_two = list(filter(lambda x: x % 2 == 0, test)) print(list_two) # [2, 4, 6] #filter是Python中的一个内嵌函数,它有两个参数, 其中第一个参数是一个函数 第二个参数是一个迭代器 返回值是布尔类型 #为真则保留 反之则去除--可以用于过滤数据
-
判断列表里有几个对称数
test = [1221, 1234, 12321, 14441, 15672] list_one = sum([num == num[::-1] for num in map(str, test)]) print(list_one) # 3 list_two = len([num for num in map(str, test) if num == num[::-1]]) print(list_two) # 3
-
列表生成式
-
def::将推导式里的中括号变成了小括号
- 推导式是一次性生成所有数据,列表式是一个个数据生成(空间小,效率低一点)
-
示例
-
test = [1, 2, 3] list_one = (i * i for i in test) print(list_one) #<generator object <genexpr> at 0x0000018A23DDA650> #生成式的直接返回结果时一个生成器
-
素数判断
import math def is_prime(n): if n == 2: return True if n < 2 or n % 2 == 0: return False return all(n % i for i in range(3, int(math.sqrt(n) + 1), 2)) print(is_prime(23)) # True
-
-
字典推导式
{键:值 for 迭代变量 in 可迭代对象 [if 条件表达式]}
-
示例
my_dict = {key: value for key in range(3) for value in range(2)} print(my_dict) # {0: 1, 1: 1, 2: 1} #my_dict = {[key: value] [for key in range(3)] [for value in range(2)]}
-
-
元祖推导式和集合推导式
-
my_tuple = (i for i in range(10)) print(my_tuple) # <generator object <genexpr> at 0x000001D17C9B7DD0> # 组推导式生成的结果并不是一个元组,而是一个生成器对象
-
my_set = {value for value in 'HelloWorld'} print(my_set) # {'r', 'o', 'W', 'H', 'l', 'd', 'e'} # 因为集合是无序且不重复的,所以会自动去掉重复的元素,并且每次运行显示的顺序不一样,使用的时候很容易晕掉
-