回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<pre><code>def distanceFromGPS(latitude1,longitude1,latitude2,longitude2):
R = 6371
dLat = math.radians(latitude2-latitude1)
dLon = math.radians(longitude2-longitude1)
a = math.sin(dLat/2) * math.sin(dLat/2) + math.sin(dLon/2) * math.sin(dLon/2) * math.cos(math.radians(latitude1)) * math.cos(math.radians(latitude2))
c = 2 * math.atan2(math.sqrt(a), math.sqrt(1-a))
d = R * c
return d
a = [(1,1),(4,4),(1.001,1),(1,1.001),(1.0000001,1),(1,1.0000000001)]
lst=[]
for L in range(0, len(a)+1):
for subset in itertools.combinations(a, L):
if len(subset) == len(a):
for i in range(0,len(a)):
for j in range(1,len(a)):
if distanceFromGPS(subset[i][0],subset[i][1],subset[j][0],subset[j][1]) < 1:
del(subset[j])
lst.append(subset[i])
print len(set(lst))
</code></pre>
<p>如果它们之间的距离小于1km,我试图删除所有的lat long对,只保留其中一个,例如在元组a列表中,它们都是经纬度对。除(4,4)外,其余所有设备之间的距离均小于1 km。所以我只希望其中一个出现在<code>print len(set(lst))</code>中,使代码打印2。函数<code>distanceFromGPS</code>返回两个lat long对之间的距离(km)。我写的代码不起作用,应该有比使用四个for循环更好的方法!请帮忙。在</p>