一道面试题——python
写法一:

1 paths=['D:\lser\local file1.txt(abcd)file2.txt(wxsd)file3.txt(qqw)','E:\path\jdk file2.txt(abcd)file5.txt(vv)','C:\duafile\dublock\dufell file4.txt(vv)'] 2 3 #如题,paths列表中有不同文件路径,对应了n个文件和不同文件内容 4 #期望输出,相同文件内容的文件路径和文件名称 5 [['D:\lser\local file1.txt','E:\path\jdk file2.txt'],['E:\path\jdk file5.txt','C:\duafile\dublock\dufell file4.txt']] 6 7 8 9 big_list=[] 10 11 for path in paths: 12 # 思路,需要提取括号中的文件内容,可以使用正则(还不会),也可以将空号替换为空格,然后使用split切片为列表 13 path=path.replace('(',' ').replace(')',' ') 14 path=path.split(' ') 15 path=path[:-1] 16 17 len_path=len(path) 18 dir=path[0] 19 20 #拿文件名/内容 21 #进行拆分,把同一路径下,有多个文件的列表,拆分成多个列表,使文件路径、文件名、文件内容,一一对应 22 i=1 23 while i <=len_path-1: 24 small_list = [] 25 small_list.append(dir) 26 file_name=path[i] 27 file_data=path[i+1] 28 29 small_list.append(file_name) 30 small_list.append(file_data) 31 big_list.append(small_list) 32 i+=2 33 print(big_list) 34 35 #开始比较文件内容 36 #逻辑:先把所有内容拿到,去重,然后再挨个把内容拿去做匹配,最后拿匹配数量大于1的结果 37 38 data_list=[] 39 lenth=len(big_list) 40 for i in range(lenth): 41 data_list.append(big_list[i][2]) 42 43 #内容去重 44 data_list=list(set(data_list)) 45 print(data_list) 46 47 res_list=[] 48 #开始一个一个拿内容,去跟每个列表的内容做比较,遇到相同的就拿出来 49 for i in data_list: 50 tmp=[] 51 for m in big_list: 52 if i==m[2]: 53 tmp.append(m[0]+' '+m[1]) 54 if len(tmp)>1: 55 res_list.append(tmp) 56 57 print(res_list)
写法二:

1 paths=['D:\lser\local file1.txt(abcd)file2.txt(wxsd)file3.txt(qqw)','E:\path\jdk file2.txt(abcd)file5.txt(vv)','C:\duafile\dublock\dufell file4.txt(vv)'] 2 3 #期望输出 4 [['D:\lser\local file1.txt','E:\path\jdk file2.txt'],['E:\path\jdk file5.txt','C:\duafile\dublock\dufell file4.txt']] 5 6 7 tmp=[] 8 for path in paths: 9 new_path=path.replace('(',' ').replace(')',' ') 10 path3=new_path.split(' ') 11 print(path3) 12 dir=path3[0] 13 for index,p in enumerate(path3[1:]): 14 if index%2==1: 15 content=p 16 tmp.append([dir,filename,content]) 17 else: 18 filename=p 19 print(tmp) 20 contents={} 21 for x in tmp: 22 if x[2] in contents: 23 contents[x[2]]+=1 24 else: 25 contents[x[2]]=1 26 print(contents) 27 28 rs=[] 29 for k,v in contents.items(): 30 if v>1: 31 o=[] 32 for x in tmp: 33 if x[2]==k: 34 o.append(x[0]+" "+x[1]) 35 rs.append(o) 36 print(rs)
分类:
python
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通