擅长:python、mysql、java
<p>您的算法很慢,因为它完全通过<code>file2</code>循环<code>file1</code>中的每个ID,即<code>O(n*m)</code>。你知道吗</p>
<p>相反,您应该循环一次<code>file2</code>,同时存储数据,然后迭代<code>file1</code>,并显示相应的元素,即<code>O(n+m)</code>。你知道吗</p>
<p>注意,还可以使用<code>defaultdict</code>和EAFP来避免检查字典中是否已经存在键。你知道吗</p>
<pre><code>from collections import defaultdict
data = defaultdict(list)
with open("file2") as f2:
for line in f2:
id1, id2, val = line.strip().split()
data[id1].append((id2, val))
data[id2].append((id1, val))
with open("file1") as f1:
for line in f1:
id = line.strip()
try:
for a, b in data[id]:
print("%s %s %s" % (id, a, b))
except KeyError:
pass
</code></pre>