擅长:python、mysql、java
<p>使用一对发电机应该可以在不占用世界上所有内存的情况下给出这个答案。对于任何结果列表大小,这都应该很好地工作(尽管可能需要很长时间)。你知道吗</p>
<pre><code>import itertools
squares = (x*x for x in itertools.count(0))
pentas = (y * (3*y-1) // 2 for y in itertools.count(0))
results = []
cur_s, cur_p = next(squares), next(pentas)
# prime the pump
while len(results) < 4:
if cur_s == cur_p:
results.append(cur_s)
# success
# advance the generator with the smaller current result
if cur_s > cur_p:
cur_p = next(pentas)
else:
cur_s = next(squares)
</code></pre>
<p>没有理由在这个任务中使用列表理解法,但是如果必须的话,你应该在cricket\u007的现在删除的答案中使用列表->;设置和设置交叉点方法</p>
<pre><code>for n in range(itertools.count(0)):
squares = [x * x for x in range(n)]
pentas = [y * (3*y-1) // 2 for y in range(n)]
result = set(squares).intersection(set(pentas))
if len(result) >= 4:
break
</code></pre>