| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1786 人关注过本帖
标题:请教:怎样最简洁的对一个list的不同元素分别取平均值?
只看楼主 加入收藏
FollowDream
Rank: 2
等 级:论坛游民
帖 子:33
专家分:14
注 册:2017-1-12
结帖率:33.33%
收藏
 问题点数:0 回复次数:1 
请教:怎样最简洁的对一个list的不同元素分别取平均值?
今天面试的时候,遇到一个很简单的问题,但是面试官要求最短的运行时间以及最简洁的写法。
  
假设list1 = ["张三", "张三", "王五", "张三", "李四"]; list2 = [10, 15, 1, 20, 99]; 所以张三的值是10、15、20(平均值是15),李四的值是99(平均值是99),王五飘过。
  
题目要求输出也是一个长度为4的list3,它的元素和list1对应,写成[15, 15, 1, 15, 99]。
  
我第一反应是遍历,然后建立字典,储存所有list1中的不同元素的下标,然后去list2里找对应的数值。但是我觉得这个办法有点笨。
  
程序代码:
dict=defaultdict(list); mapping={}; list3=[] 
for index, item in enumerate(list1): 
     dict[item].append(index)   # 生成一个字典 {张:[0,1,3];李:[4];王:[2]} 
for key in dict.iterkeys(): 
     sum = 0; av=0 
     for element in dict[key]: 
         sum += list2[element]; 
     av = sum / len(dict[key]) 
     mapping[key] = av   # 生成一个字典 {张:15;李:99;王:1} 
for index, item in enumerate(list1): 
     list3.append(mapping[item])   # 遍历list1来生成list3 

  
面试官问:“假设有一个数值的list4=[10, 20, 30, 40, 50],另有一个下标的list5=[0, 2, 4],要求根据list5找出list4[0]、list4[2]、list4[4]的总和,除了像刚才那样遍历,还有其他方法吗?” 我一时语塞。
  
所以请教一下大家:
1 把list1中的张、王、李对应的list2中的数值取出,再生成和list1对应的list3,除了像刚才那样建立字典,还有简单其他方法吗?用zip和izip么?
2 把数值list4的元素根据下标list5取出并且运算,除了像刚才那样建立遍历,还有简单其他方法吗?
  
谢谢了先!
搜索更多相关主题的帖子: list 元素 平均值 dict for 
2017-08-10 13:54
FollowDream
Rank: 2
等 级:论坛游民
帖 子:33
专家分:14
注 册:2017-1-12
收藏
得分:0 
回复 楼主 FollowDream
已经解决了。不必存储下标,直接存储数值即可。谢谢!
2017-08-11 12:35
快速回复:请教:怎样最简洁的对一个list的不同元素分别取平均值?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.014934 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved