集团主站
欢迎来到成都达内官方网站!达内—美国上市公司 亿元级外企IT培训企业!
成都it培训哪家好
成都it培训哪家好
全国服务监督电话:400-111-8989  |   联系客服   |
当前位置:主页 > 培训课程 > Python >

成都Python培训:Python高级编程技巧(部分)

发布者: 成都达内     浏览次数:     发布时间:2020-09-01 15:31:30

成都Python培训:在列表、字典、集合中筛选数据,很多人学习python,不知道从何学起。很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手。...

  在列表、字典、集合中筛选数据

  很多人学习python,不知道从何学起。

  很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手。

  很多已经做案例的人,却不知道如何去学习更加高深的知识。

  示例数据:

  data_list = [ 52, 68, 20, 85, 63, 21, 14, 85 ]

  data_dict = { ‘数学’:56, ‘英语’:68, ‘语文’:55, ‘生物’:72, ‘物理’:92, ‘体育’:32 }

  data_set = { 52, 68, 20, 85, 63, 21, 14, 85 }

  列表

  [ x for x in data_list if x > 60 ]

  filter(lambda x: x > 60, data_list) # 注:filter返回的是迭代器

  字典

  { key: val for key, val in d.items() if val > 60 }

  集合

  { x for x in data_set if x > 60 }

  为元组元素命名

  如果我们的数据有固定的格式如学生信息有姓名、性别、年龄等等,这时我们通常使用元组储存数据,以此减少内存开销。

  但因此不能像字典那样以键访问值,因此,我们需要一个兼具字典和元组优点的类型。

  > 命名元组 collections.namedtuple

  from collections import namedtuple

  Student = namedtuple('Student', ['name', 'sex', 'age'])

  s1 = Student('Tom', '男', 18)

  print(s1[1]) # '男'

  print(s1.age) # 18

  通过列表、元组创建字典

  > dict.fromkeys

  如下,我打算统计 data_list 中每个数字出现的频率

  data_list = [1, 1, 1, 2, 2, 3, 4, 4, 4, 4, 5, 5, 6, 8, 9, 9]

  stat = dict.fromkeys(data_list, 0)

  print(stat) # {1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 8: 0, 9: 0}

  for k in data_list:

  stat[k] += 1

  print(stat) # {1: 3, 2: 2, 3: 1, 4: 4, 5: 2, 6: 1, 8: 1, 9: 2}

  字典排序

  假设我有某班数学成绩的字典型数据,我需要对其进行排序

  score = {

  '龙密': 51,

  '于飞': 49,

  '朱行': 34,

  '赖国': 48,

  '杜佺': 37,

  '谢香': 55,

  '秦香': 30,

  '陆玟': 67,

  '任姑': 57,

  '常晓': 92

  }

  zip + sorted

  tmp = zip(score.values(), score.keys()) # zip返回的是迭代器,内容为[(51,'龙密'),(49,'于飞'),(34,'朱行'),...]

  result = sorted(tmp) # 使用 sorted(tmp, reverse=True) 进行降序排序

  print(tmp) # [(30, '秦香'), (34, '朱行'), (37, '杜佺'), (48, '赖国'), ...]

  sorted (使用key参数)

  print(score.items()) # .items() 返回了元组列表 [('龙密', 51), ('于飞', 49), ('朱行', 34), ...]

  result = sorted(score.items(), key=lambda item: item[1])

  print(result) # 结果 [('秦香', 30), ('朱行', 34), ('杜佺', 37), ...]

  注:似乎第一种快点,是不是很反直觉呀

  寻找字典的公共键

  利用集合

  r1 = {'苏亚雷斯':1,'梅西':2,'本泽马':1,'c罗':3}

  r2 = {'苏亚雷斯':1,'c罗':1,'格里兹曼':2,'贝尔':1}

  print(r1.keys() & r2.keys()) # { 'c罗', '苏亚雷斯' }

  让字典保持有序

  > 有序字典 collections.OrderedDict

  from collections import OrderedDict

  od = OrderedDict()

  od['first'] = '这是第一条数据'

  od['second'] = '这是第二条数据'

  od['third'] = '这是第三条数据'

  for key,val in od.items():

  print(key, val)

  '''输出如下

  first 这是第一条数据

  second 这是第二条数据

  third 这是第三条数据

  '''

  生成器函数

  def getId():

  i = 0

  while(True):

  i += 1

  yield i

  id = getId()

  for _ in range(10):

  print(next(id))

  '''结果

  1

  2

  3

  ...

  '''

  yield协程

  使用协程计算平均数

  def average():

  count, total, arg = 0, 0, 0

  while True:

  val = yield arg

  if val:

  total += val

  count += 1

  arg = total / count

  data = [15, 56, 85, 25, 36, 45, 20, 21, 2]

  arg = average()

  next(arg) # 预激

  for val in data:

  print(arg.send(val))

  print('平均数:', next(arg))

  '''结果

  15.0

  35.5

  52.0

  45.25

  43.4

  43.666666666666664

  40.285714285714285

  37.875

  33.888888888888886

  平均数: 33.888888888888886

  '''

  同时遍历值与下标

  > enumerate

  seasons = ['Spring', 'Summer', 'Fall', 'Winter']

  for i, v in enumerate(seasons):

  print('{}: {}'.format(i, v))

  '''返回

  0: Spring

  1: Summer

  2: Fall

  3: Winter

  '''

(责任编辑:范老师)
最新开班
  • 成都Java培训班
    免费试听名额发放中...
  • 成都C++培训班
    免费试听名额发放中...
  • 成都PHP培训班
    免费试听名额发放中...
  • 成都网络工程培训班
    免费试听名额发放中...
  • 成都Unity3D培训班
    免费试听名额发放中...
  • 成都大数据培训班
    免费试听名额发放中...
  • 成都uid培训班
    免费试听名额发放中...
  • 成都会计培训班
    免费试听名额发放中...
  • 成都Python培训班
    免费试听名额发放中...
  • 成都嵌入式培训班
    免费试听名额发放中...
  • 成都web培训班
    免费试听名额发放中...
  • 成都软件测试培训班
    免费试听名额发放中...
在线留言
提交

校区地址:成都市锦江区东大街紫东楼端35号明宇金融广场19楼1906室

联系电话:400-111-8989

公交路线:芷泉街(18路;21路;43路;48路;104路;152路;335路 ) 地铁路线:东门大桥站(地铁2号线)

校区地址:成都市高新区奥克斯广场蜀锦路209号一楼商铺

联系电话:400-111-8989

公交路线:益州大道锦城大道口(18路;21路;43路;48路;104路;152路;335路 ) 地铁路线:孵化园(地铁1号线)

校区地址:成都锦江区东大街芷泉街229号东方广场C座3楼303

联系电话:400-111-8989

公交路线:芷泉街(188路;115路;515路;236路;505路;501路;84路 ) 地铁路线:东门大桥站(地铁2号线)

校区地址:成都市武侯区佳灵路3号红牌楼广场2号写字楼11楼1115号

联系电话:400-111-8989

公交路线:红牌楼东(11路;92路;100路;111路;139路;g28路;快速公交K1/K2) 地铁路线:红牌楼站(地铁3号线)

校区地址:成都市锦江区红星路二段70号四川日报大厦502-2

联系电话:400-111-8989

公交路线:市二医院站(6路;49路;102路;5路;37路;g92路;) 地铁路线:地铁市二医院(地铁3号线)

校区地址:成都市锦江区东大街芷泉段229号东方广场C座16层

联系电话:400-111-8989

公交路线:芷泉街(18路;21路;43路;48路;104路;152路;335路 ) 地铁路线:东门大桥站(地铁2号线)

校区地址:四川省成都市武侯区高新科技孵化园9号园区E座7楼

联系电话:400-111-8989

公交路线:益州大道锦城大道口(18路;21路;43路;48路;104路;152路;335路 ) 地铁路线:孵化园(地铁1号线)

了解达内动态
关注成都达内教育公众号

首页 | 关于达内 | 课程中心 | 专家师资 | 视频教程 | 学员空间 | 校企合作 | 新闻资讯 | 就业指导 | 网站地图

2016-2025 达内时代科技集团有限公司 版权所有 京ICP证8000853号-56 蜀ICP备18021046号-3