擅长:python、mysql、java
<p>使用<code>dict</code>或<code>defaultdict</code>将唯一值存储为映射到它们出现的索引的键,然后组合<code>dicts</code>:</p>
<pre><code>from collections import defaultdict
def make_offset_dict(it):
ret = defaultdict(list) # Or set, the values are unique indices either way
for i, x in enumerate(it):
ret[x].append(i)
dictA = make_offset_dict(A)
dictB = make_offset_dict(B)
for k in dictA.viewkeys() & dictB.viewkeys(): # Plain .keys() on Py3
print(k, dictA[k], dictB[k])
</code></pre>
<p>这种方法每次只迭代<code>A</code>和<code>B</code>一次,因此即使它们是一次性使用的迭代器(例如来自类似文件的对象),也能有效地工作,存储的数据不会超过需要,并且坚持使用廉价的基于哈希的操作,而不是重复迭代。你知道吗</p>
<p>这不是您特定问题的解决方案,但它保留了解决您的问题所需的所有信息,然后保留了一些信息(例如,在<code>A</code>或<code>B</code>中找出任何给定值的匹配位置是很便宜的);您可以根据您的用例或更复杂的用例对其进行简单的调整。你知道吗</p>