其他列表中的Python检查列表

其他列表中的Python检查列表,python,list,recursion,performance,Python,List,Recursion,Performance,我需要运行2个列表(这些列表是“列表列表列表”),这些列表中的每个项目都包含[path,md5],并生成一个if语句,其工作方式如下: (逻辑上) 这是路吗?还有一种更好的方法(也许是递归的方法)可以做到这一点 谢谢 编辑: 样本输入:(md5既不真实也不合理) [路径,MD5] 大列表2=['/home/user/Desktop/folder/1.txt'、'93n8nv35732vb9527']、['/home/user/Desktop/folder/2.txt'、'43284fh234h'

我需要运行2个列表(这些列表是“列表列表列表”),这些列表中的每个项目都包含[path,md5],并生成一个if语句,其工作方式如下: (逻辑上)

这是路吗?还有一种更好的方法(也许是递归的方法)可以做到这一点

谢谢

编辑: 样本输入:(md5既不真实也不合理) [路径,MD5]

大列表2=['/home/user/Desktop/folder/1.txt'、'93n8nv35732vb9527']、['/home/user/Desktop/folder/2.txt'、'43284fh234h']、['/home/user/Desktop/folder/3.txt'、'4534V45355V353']

大列表1=['/home/user/Desktop/folder/1.txt'、'93n8nv35732vb9528']、['/home/user/Desktop/folder/2.txt'、'43284fh234h']、['/home/user/Desktop/folder/3.txt'、'4534V45355V353']

输出应为: “/home/user/Desktop/folder/1.txt”,“93n8nv35732vb9527”
因为它的路径相同,但md5不同,所以你可以在一行中完成一些疯狂的列表理解工作。但我认为它不太可读

save_list = [small_list2 for small_list2 in big_list2 for small_list1 in big_list1 if small_list2[0] == small_list1[0] and small_list2[1] != small_list2[1]]
是的……请不要这样写P


无论如何,您的代码/想法似乎是正确的,但是没有样本输入就无法真正验证。

假设
small_list1
small_list2
都不包含重复路径(两个列表中出现的路径都可以),听起来您应该使用dicts。使用DICT将路径映射到校验和,而不是
[path,md5]
列表。然后,您可以高效地查找每个路径的校验和:

path_dict1 = something()
path_dict2 = something_else()
save_list = [(path, md5) for path, md5 in path_dict2.viewitems()
             if md5 != path_dict1.get(path)]

这将比基于列表的解决方案运行得快得多,后者所需的时间与输入列表长度的乘积成正比。此解决方案所需的时间与路径数量成比例。

您能提供一个示例输入吗?
保存列表=[[path2,md5_2]对于path2,大列表中的md5_2对于path1,大列表中的md5_1如果path2==path1和md5_2!=md5_1]
我考虑过,但我有重复的路径。。所以不是很好。@FernandoRetimo:在列表中重复,还是在列表之间重复?因为列表之间存在重复项,此解决方案可以很好地处理它们,但列表中的重复项听起来像是个问题。(调整解决方案以处理列表中的重复项非常简单,但如果列表中存在重复项,则可能会有更大的问题。)谢谢,请务必处理。
path_dict1 = something()
path_dict2 = something_else()
save_list = [(path, md5) for path, md5 in path_dict2.viewitems()
             if md5 != path_dict1.get(path)]