以前去面試過,某鵝的最後一道題目,雖然不是特別準確的數據,可是基本都差很少,人家說用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()
基本出來告終果,可是總以爲仍是有些問題的,可是工做也有點忙,沒辦法先記錄一下吧,後面有時間再看看。