我有两张单子,都很长。列表A包含一个整数列表,其中一些整数在列表B中重复出现。我可以通过以下方法找到出现在这两个列表中的元素:
idx = set(list_A).intersection(list_B)
这将返回列表a和列表B中出现的所有元素的集合
但是,我想找到一种方法来查找两个列表之间的匹配,并保留有关元素在两个列表中的位置的信息。这样的函数可能看起来像:
def match_lists(list_A,list_B):
.
.
.
return match_A,match_B
其中match\u A将包含列表\u A中元素的位置,这些元素在列表\u B中的某个位置有匹配项,反之亦然。 我可以看到如何使用for循环来构造这样的列表,但是对于长列表来说,这样做的速度会非常慢。你知道吗
关于重复项:列表\u B中没有重复项,如果列表\u a中有重复项,则返回所有匹配的位置作为列表,因此匹配\u a将是列表的列表。你知道吗
这应该能完成任务:)
(感谢机器渴望复制编辑)
这个怎么样:
使用
dict
或defaultdict
将唯一值存储为映射到它们出现的索引的键,然后组合dicts
:这种方法每次只迭代
A
和B
一次,因此即使它们是一次性使用的迭代器(例如来自类似文件的对象),也能有效地工作,存储的数据不会超过需要,并且坚持使用廉价的基于哈希的操作,而不是重复迭代。你知道吗这不是您特定问题的解决方案,但它保留了解决您的问题所需的所有信息,然后保留了一些信息(例如,在
A
或B
中找出任何给定值的匹配位置是很便宜的);您可以根据您的用例或更复杂的用例对其进行简单的调整。你知道吗相关问题 更多 >
编程相关推荐