我有一个程序,搜索两个单独的列表,让我们称之为list1和list2。你知道吗
我只想打印list1和list2具有匹配项的实例。问题是,并非两个列表中的所有项都匹配,但第一、第三和第四项应该匹配。你知道吗
如果它们匹配,我希望将完整的列表(包括不匹配的项)附加到两个相应的列表中。你知道吗
我编写了以下代码:
for item in list1:
for item2 in list2:
if (item[0] and item[2:4])==(item[0] and item2[2:4]):
newlist1.append(item)
newlist2.append(item2)
break
这是可行的,但效率很低。对于我正在查看的一些较大的文件,完成匹配可能需要10秒以上,理想情况下应该最多只需要一半。你知道吗
我的想法是,每次运行代码时,不必从list2中的开始重新开始,只要从最后一个匹配点开始就足够了。但我不知道怎么用代码写。你知道吗
你的条件
(item[0] and item[2:4])==(item[0] and item2[2:4])
是错误的。你知道吗除了第二个
item[0]
应该是item2[0]
之外,(item[0] and item[2:4])
所做的是(类似于(item2[0] and item2[2:4])
):item[0]
是0
,则返回item[0]
本身,即0
item[0]
不是0
,则返回item[2:4]
是什么然后和第二项的结果进行比较。因此,
[0,1,1,1]
将“等于”[0,2,2,2]
,[1,1,1,1]
将“等于”[2,1,1,1]
。你知道吗尝试改用
tuples
:或者按照另一个答案的建议使用
operator.itemgetter
。你知道吗为了加速两个列表中项目的成对匹配,可以将第一个列表中的项目放入字典,使用这些元组作为键,然后遍历另一个列表并在字典中查找匹配的项目。复杂性将是O(n+m)而不是O(n*m)(n和m是列表的长度)。你知道吗
这可能会减少一点时间复杂度,虽然。。。你知道吗
相关问题 更多 >
编程相关推荐