Python函数之数据类型推导式
1.列表推导式
-
引子
列表推导式,简单的总结就是:一行代码构建一个列表。不是所有的列表都可以通过列表推导式进行构建,相对比较有规律的列表可以通过列表推导式进行构建。
测试:
# 需求:构建一个列表,里面的元素是从1~100. # 传统方法 # lst = [] # for i in range(1,101): # lst.append(i) # print(lst) # 列表推导式 lst = [_ for _ in range(1, 101)] print(lst)
-
列表推导式分为两种模式
-
循环模式
[变量(格式化的) for 变量 in iterable]
-
筛选模式
[变量(格式化的) for 变量 in iterable if 条件]
-
-
测试
# 构建一个列表,列表里面的元素为 [python1期,python2期,python的3期....python10期] lst = [f'python{i}期' for i in range(1, 11)] print(lst) # 构建一个列表,列表里面的元素为100以内的所有偶数。 # print([i for i in range(2, 101, 2)]) # 构建一个列表,列表里面的元素为[1, 4, 9, 16, 25,...100] print([i ** 2 for i in range(1, 11)]) print([i * i for i in range(1, 11)]) # 筛选模式 # 列表里面的元素为python1期,python2期,python的3期....python10期]没有pyhton7期。 lst = [f'python{i}期' for i in range(1, 11) if i != 7] print(lst) # 将这个列表中大于3的元素留下来。 # lst = [7, 9, 13, 2, 1, 4, 5, 2, 6] # print([i for i in lst if i > 3]) # 将列表中长度大于3的字符串全部变成大写留下来。 # lst = ['barry', 'qq', 'tom', 'allen', 'tony'] # print([i.upper() for i in lst if len(i) > 3]) 找到嵌套列表中名字含有两个‘e’的所有名字 (两层循环) names = [['Tom', 'Billy', 'Jefferson', 'Andrew', 'Wesley', 'Steven', 'Joe'], ['Alice', 'Jill', 'Ana', 'Wendy', 'Jennifer', 'Sherry', 'Eva']] 常规方法 lst = [] for l in names: for name in l: if name.count('e') == 2: lst.append(name) print(lst) 推导式 ret = [name for l in names for name in l if name.count('e') == 2] print(ret)
-
总结:
列表推导式只能完成相对有规律的列表的构建,如果你需要构建的列表没有规律或者是需要三层以及以上的循环才可以搞定,那么尽量不要使用列表推导式。
-
字典推导式
-
循环模式
{k:v for k,v in iterable}
-
筛选模式
{k:v for k,v in iterable if 条件}
-
测试:
# dic = {'name': 'barry', 'age': 18} # 用字典推导式构建一个字典:让dic字典的键值对互换。 # print({val: key for key, val in dic.items()}) # 有列表: # lst = ['barry', 'qq', 'tom', 'allen', 'tony'] # 通过字典推导式构建一个字典:字典的键为列表的元素的索引,值为列表的对应的元素。 # print({index: lst[index] for index in range(len(lst))}) lst = [7, 9, 13, 2, 1, 4, 5, 6] # 将大于3的所有的元素为键,值为一个空列表。 print({i: [] for i in lst if i > 3})
-
-
集合推导式
-
循环模式
{变量(格式化的) for 变量 in iterable}
-
筛选模式
{变量(格式化的) for 变量 in iterable if 条件}
-
测试
lst = [7, 9, -13, 2, -1, 4, -5, 6] # 将列表里面的元素变成绝对值放在一个集合中。 print({abs(i) for i in lst})
-