<p>我相信您的代码可以通过两种方式得到改进:</p>
<ul>
<li>首先,使用<code>tuples</code>而不是<code>lists</code>,因为迭代<em>元组</em>比迭代<em>列表</em>要<a href="https://stackoverflow.com/questions/68630/are-tuples-more-efficient-than-lists-in-python">generally faster</a>。你知道吗</li>
<li>其次,您的<code>for</code>循环可以简化为<strong>只有一个</strong>循环,它迭代您要读取的元组的索引。当然,这个假设适用于<em>当且仅当</em>所有元组包含相同数量的项(即:<code>len(Lat) == len(Lon) == len(Alt) == len(Lat2) == len(Lon2) == len(Alt2)</code>)。你知道吗</li>
</ul>
<p>下面是改进的代码(我冒昧地删除了<code>import numpy</code>语句,因为它没有在您提供的代码中使用):</p>
<pre><code># use of tuples
Lon = (450000.50, 459000.50, 460000, 470000)
Lat = (5800000.50, 459000.50, 500000, 470000)
Alt = (-1, -9, -2, 1)
Lon2 = (40000.50, 459000.50, 460000, 470000)
Lat2 = (5800000.50, 459000.50, 800000, 470000)
Alt2 = (-3, -1, -20, 2)
MeanAlt = []
appendAlt = MeanAlt.append
LonOverlap = []
appendLon = LonOverlap.append
LatOverlap = []
appendLat = LatOverlap.append
# only one loop
for i in range(len(Lon)):
if (Lon[i] == Lon2[i]) and (Lat[i] == Lat2[i]):
MeanAltData = (Alt[i] + Alt2[i]) / 2
appendAlt(MeanAltData)
LonOverlapData = Lon[i]
appendLat(LonOverlapData)
LatOverlapData = Lat[i]
appendLon(LatOverlapData)
print(MeanAlt) # correct ans should be MeanAlt = [-2.0,-5,1.5]
print(LonOverlap)
print(LatOverlap)
</code></pre>
<p>我在笔记本电脑上执行了这个程序一百万次。按照我的代码,所有执行所需的时间是:<strong>1.41秒</strong>。另一方面,使用你的方法所需的时间是:<strong>4.01秒</strong>。你知道吗</p>