一道面试题——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)
View Code
复制代码

 

 

写法二:

复制代码
 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)
View Code
复制代码

 

posted @   hushuer  阅读(2)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示