前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >(二十) 初遇python甚是喜爱之list Comprehensions列表推导式

(二十) 初遇python甚是喜爱之list Comprehensions列表推导式

作者头像
XXXX-user
修改2019-07-30 10:52:01
3060
修改2019-07-30 10:52:01
举报
文章被收录于专栏:不仅仅是python不仅仅是python

各位读者大大们大家好,今天学习python的列表推导式,并记录学习过程欢迎大家一起交流分享。

新建一个python文件命名为py3_list_comprehensions.py,在这个文件中进行操作代码编写:

代码语言:javascript
复制
#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)

运行效果:

代码语言:javascript
复制
[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的列表推导式学习就到这里!

关注公号

下面的是我的公众号二维码图片,欢迎关注。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-05-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 yale记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 关注公号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档