前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python学习笔记(4)——groupby

python学习笔记(4)——groupby

作者头像
my_sunshine
修改2020-09-17 15:41:33
7980
修改2020-09-17 15:41:33
举报

python : groupby 结果浅解,&之后的 y_list=[v for _,v in y]

自学《python编程从入门到实践》的第16章的16.2.6 收盘价均值,讲解得不够详细,幸而在论坛看到了相关文章 ”Python编程:从入门到实践 json练习详解~~“,解决了大部分困惑。非常感谢!

唯一还是不清楚的是   y_list = [v for _, v in y]这句,特别是那个下划线

    for x, y in groupby(sorted(zip(x_data, y_data)), key=lambda _: _[0]):         y_list = [v for _, v in y]

要明白这句,其实玄机在上句。我们首先要搞明白groupby 返回的结果类型,然后才用列表解析去相应处理。

groupby 返回结果中,x 是x_data 的有序唯一值,而 y 已不单纯再是个列表值,而是个groupby 对象,包含了x,y 值的组合。不能直接打印,但可以取出来再操作, 感觉像个元组列表。详见实验:

from itertools import groupby xlist = [1,2,1,4] ylist = [2,3,4,2] xy_map =[] for x, y in groupby(sorted(zip(xlist, ylist)), key=lambda _: _[0]):     print ("\nx:",x)    # print ("y:",y)#y is a groupby object which can't directly print     y_list = [v for w,v in y]     print ("y_list:",y_list)     xy_map.append([x, sum(y_list)/len(y_list)]) print ("xy_map:",xy_map,"\n")

"sorted(zip(xlist, ylist)), key=lambda _: _[0]"之后的结果类似:

[1,2],[1,4],[2,3],[4,2]

再 groupby处理后 x,y的结果类似: 1,[(1, 2), (1, 4)] 2,[(2, 3)] 3,[(4, 2)]

【敲黑板】看y的值。。。

所以

y_list = [v for _,v in y] 等同于 y_list = [v for w,v in y]

只是要跳过前面部分,取groupby y 值中后面那部分,即返回v赋值给y_list。如[(1, 2), (1, 4)]中的 2,4,[(2, 3)]中的3

延申,换个顺序:x_list = [v for v,_ in y]就会返回[(1, 2), (1, 4)]中的 1,1,[(2, 3)]中的2

打印结果如下:

x: 1 y_list: [2, 4] x: 2 y_list: [3] x: 4 y_list: [2] xy_map: [[1, 3.0], [2, 3.0], [4, 2.0]]

进一步实验也验证了这个理解,比如不分-,v 或者w,v(这里w只是随便起的名字,你叫他test或什么效果一样),直接取y的值打印

for x, y in groupby(sorted(zip(xlist, ylist)), key=lambda _: _[0]):     print ("x:",x)     y_list = [v for v in y]     print ("y_list_2:",y_list)

 结果如下:

x: 1 y_list_2: [(1, 2), (1, 4)] x: 2 y_list_2: [(2, 3)] x: 4 y_list_2: [(4, 2)]

本文系转载,前往查看

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

本文系转载前往查看

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • python : groupby 结果浅解,&之后的 y_list=[v for _,v in y]
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档