各位读者大大们大家好,今天学习python的列表推导式,并记录学习过程欢迎大家一起交流分享。
新建一个python文件命名为py3_list_comprehensions.py,在这个文件中进行操作代码编写:
#list Comprehensions(列表推导式) :
#用于基于现有列表创建新的列表
#目的是让大家写程序时候更加快捷方便
#写出更简洁的代码
#开始码起来:
#定义一个list列表
nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
#想要得到nums中的每一个元素到一个新的list中去
#看如下代码实现:
my_list = []
for n in nums:
my_list.append(n)
print(my_list)
#接下来我们使用列表推导式实现:
my_list = []
my_list =[n for n in nums]
print('推导式方式n列表:',my_list)
#想要得到nums中的每一个元素n*n到一个新的list中去
#使用普通的for循环实现:
my_list = []
for n in nums:
my_list.append(n * n)
print(my_list)
#接下来我们使用列表推导式实现:
my_list = []
my_list = [n * n for n in nums]
print('推导式方式n*n列表: ',my_list)
#使用map + lambda实现
#map():内置的函数,接收一个函数function和一个list
#并通过把函数function依次作用在list的每个元素
#得到一个新的list并返回。
#lambda表达式
#通常是在需要一个函数
#但是又不想去命名一个函数情况下使用
#也就是指匿名函数。
#例如:
def add(x,y):
return x + y
#用lambda表达式实现上边的函数:
l_add = lambda x,y:x+y
#继续实现例子:
my_list = []
my_list = list(map(lambda n: n * n,nums))
print('map + lambda实现n * n :',my_list)
#想要得到nums列表中的偶数到新的列表中去
#for循环代码实现
my_list = []
for n in nums:
if n % 2 == 0:
my_list.append(n)
print(my_list)
#推导式实现
my_list = []
my_list = [n for n in nums if n % 2 == 0]
print(my_list)
#使用filter + lambda实现
#filter()函数用于过滤序列
#过滤掉不符合条件的元素
#返回由符合条件元素组成的新列表
my_list = []
my_list = list(filter(lambda n: n % 2 == 0,nums))
print('filter + lambda实现:',my_list)
#实现一个(字母,数字)对的列表
#使用for实现:
my_list = []
for letter in 'abcd':
for num in [0, 1, 2, 3]:
my_list.append((letter,num))
print(my_list)
#使用推导式实现:
my_list = []
my_list = [(letter,num) for letter in 'abcd' for num in (0 ,1, 2, 3)]
print(my_list)
#推导式生成字典
names = ['彪哥','小翠','吴德荣']
jobs = ['保镖','秘书','总经理','大厨']
#想到得到一个字典dict['name':'job']
#用到了zip()函数
#(将两个可迭代的列表象作为参数,一对一的生成元组)
#eg:
print(list(zip(names,jobs)))
#[('彪哥', '保镖'), ('小翠', '秘书'), ('吴德荣', '总经理')]
#for循环实现:
my_dict = {}
for name,job in zip(names,jobs):
my_dict[name] = job
print(my_dict)
#使用推导式:
my_dict = {}
my_dict = {name:job for name,job in zip(names,jobs)}
print('推导式 字典:',my_dict)
#不想要名字为彪哥的信息:
my_dict = {}
my_dict = {name:job for name,job in zip(names,jobs) if name!='彪哥'}
print('推导式加条件的字典:',my_dict)
#推导式生成Set
nums = [1, 1, 2, 3, 4, 3, 6, 5, 6, 7, 7, 8, 9, 1]
my_set = set()
for n in nums:
my_set.add(n)
print(my_set)
#推导式实现:
my_set = set()
my_set = {n for n in nums}
print('推导式set:',my_set)
#Generator生成器推导式
#Generator生成器后续学到在细讲
#实现一个n*n的生成器
#for循环版本:
nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
def gen_func(nums_list):
for n in nums_list:
#yield是一个类似return的关键字,
#只是这个函数返回的是个生成器。
yield n * n
my_gen = gen_func(nums)
for i in my_gen:
print(i)
#推导式实现:
my_gen = (n*n for n in nums)
运行效果:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
推导式方式n列表:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
推导式方式n*n列表: [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
map + lambda实现n * n :[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
[2, 4, 6, 8, 10]
[2, 4, 6, 8, 10]
filter + lambda实现:[2, 4, 6, 8, 10]
[('a', 0), ('a', 1), ('a', 2), ('a', 3), ('b', 0), ('b', 1), ('b', 2), ('b', 3), ('c', 0), ('c', 1), ('c', 2), ('c', 3), ('d', 0), ('d', 1), ('d', 2), ('d', 3)]
[('a', 0), ('a', 1), ('a', 2), ('a', 3), ('b', 0), ('b', 1), ('b', 2), ('b', 3), ('c', 0), ('c', 1), ('c', 2), ('c', 3), ('d', 0), ('d', 1), ('d', 2), ('d', 3)]
[('彪哥', '保镖'), ('小翠', '秘书'), ('吴德荣', '总经理')]
{'彪哥': '保镖', '小翠': '秘书', '吴德荣': '总经理'}
推导式 字典:{'彪哥': '保镖', '小翠': '秘书', '吴德荣': '总经理'}
推导式加条件的字典:{'小翠': '秘书', '吴德荣': '总经理'}
{1, 2, 3, 4, 5, 6, 7, 8, 9}
推导式set:{1, 2, 3, 4, 5, 6, 7, 8, 9}
1
4
9
16
25
36
49
64
81
100
今天初学python的列表推导式学习就到这里!
下面的是我的公众号二维码图片,欢迎关注。