以前去面试过,某鹅的最后一道题目,虽然不是特别准确的数据,可是基本都差很少,人家说用awk能够弄出来,我实在惭愧,结果仍是用了python作,如下给出相关的记录:python
QQ号 等级 游戏时间面试
23421421 60 89app
12342432 34 78ide
89348199 45 100游戏
84193873 55 200ip
32981193 30 20get
84615304 15 30it
91071621 35 70io
23421421 5 500class
23421421 25 22
32981194 90 1000
89348199 50 180
32981193 60 190
32981193 35 25
上面是我虚拟出来的数据,作到的目标数据是:
QQ号 等级 游戏总时间
xxx xxxx xxxx
先说一下,这里的QQ号有重复,等级也有变化(确定跳等级最高的来记录),游戏时间也要总和。
说明一下整体的处理过程:
一、从文件读出数据,并生产一个列表,大列表里面又根据每一行存储着一个小列表
二、循环筛选大列表,并准备三个列表,target_list保存筛选出来的单一的qq号并且处理好的等级、游戏时间的列表,再准备等级列表dengji_list存储相同QQ号的等级并筛选等级最大的,游戏时间列表youxishijian_list存储相同QQ号的游戏时间并计算出总和,而后再统一添加到target_list中去,再导入到target_target_list中去,最后把target_list、dengji_list、youxishijian_list的数据清空,准备下一个QQ号的数据处理。
如下python代码:
__author__ = 'samfeng' def checkio(): make_list = [] # 读出文件并要生成的列表 target_list = [] # 中转的存储列表 dengji_list = [] # 存储等级的列表 youxishijian_list = [] # 存储游戏等级的列表 target_target_list = [] # 存储了QQ号、最大等级、游戏时间总和的列表 new_target_list = [] # 去除重复的最终列表 file_open = open(r"C:\Users\samfeng\Desktop\file.txt") # 打开文件,r是直接转换\符号,若是不用要\\这样 for eachline in file_open: new_eachline = eachline.strip().split(' ') # 在读取出来后再去除头尾空格和换行符,再根据空格符区分数据 make_list.append(new_eachline) # 把已经分析出来的添加到make_list中去 for check_list in make_list: # 循环make_list的每个列表,以便作比较(1) for check_list1 in make_list: # 再循环make_list(2) if check_list1[0] == check_list[0]: # (1)中的每个列表跟(2)中循环的列比较,这里比较的是第一项目[0] dengji_list.append(check_list1[4]) # 添加等级,等级基本固定在第4个元素,不清楚能够打印一下make_list看看 youxishijian_list.append(check_list1[-1]) # 游戏时间都是最后一个元素,不清楚能够打印一下make_list看看 if len(target_list) == 0: # target_list只是暂时存储的的列表,在每次存储完并添加 #到target_target_list列表中后,就要清空,清空后的长度为0 target_list.append(check_list[0]) # 先添加QQ号 youxishijian_list = map(int, youxishijian_list) # 因为一开始的添加的有时间都是字符,要先换成int类型 target_list.append(max(dengji_list)) # target_list添加最大的等级 target_list.append(sum(youxishijian_list)) # target_list再添加登记时间和 if len(target_target_list) == 0: # 主要是作第一次的判断,由于第一次的时候t #arget_target_list没有内容 target_target_list.append(target_list) else: if target_list[0] not in target_target_list[0]: # 原本想区分全部的重复的 #列表首项的QQ号,本觉得python会直接就给我循环了后面才发现每次只是基本就是 #比较第一项的QQ号,致使后面的添加出来了多项重复的,太坑爹了,不过这样也好 #,直接后面清除重复项目 target_target_list.append(target_list) dengji_list = [] # 清空 youxishijian_list = [] # 清空 target_list = [] # 清空 for i in target_target_list: # 去除重复项目 if not i in new_target_list: new_target_list.append(i) print(new_target_list) if __name__ == "__main__": checkio()
基本出来告终果,可是总以为仍是有些问题的,可是工做也有点忙,没办法先记录一下吧,后面有时间再看看。