【发布时间】:2017-04-21 17:55:13
【问题描述】:
任务:一个移动的物体每秒测量一些参数,应该与每 10 分钟测量一次的十个静止物体的测量值进行比较。
条件: 运动物体应在距离其中一个静止物体 100 米的范围内,并且在时间上,运动和静止测量之间存在 +-5 分钟的差值,以便能够测量比较参数。
列表: time_m、time_s、lon_m、lat_m、lon_s、lat_s、param1_m、param1_s、param2_m、param2_s 等(m 表示移动,s 表示静止(来自十个静止物体的所有测量值)在同一个列表中))
问题:由于每个列表有大约 10^5 次测量,我的解决方案有两个 for 循环和两个 if 语句需要太长时间。拜托,你能帮我更好地解决这个问题吗?
我的解决方案:
dt_m = [datetime.datetime.strptime(item, '%Y-%m-%dT%H:%M:%S') for item in time_m]
dt_s = [datetime.datetime.strptime(item, '%Y-%m-%dT%H:%M:%S') for item in time_s]
d = datetime.timedelta(minutes=5)
lon_hundred_m = 0.00180 #lon degrees for 100 m at lat 60
lat_hundred_m = 0.00090 #lat degrees for 100 m
for i in range(len(lon_m)):
for j in range(len(lon_s)):
if lon_m[i] >= (lon_s[j]-lon_hundred) and lon_m[i] <= (lon_s[j]+lon_hundred) and lat_m[i] >= (lat_s[j]-lon_hundred) and lat_m[i] <= (lat_s[j]+lon_hundred):
if dt_s[j] >= dt_m[i]-d and dt_s[j] <= dt_m[i]+d:
time_m_2.append(time_m[i])
param1_m_2.append(param1_m[i])
param2_m_2.append(param2_m[i])
lon_m_2.append(lon_m[i])
lat_m_2.append(lat_m[i])
time_s_2.append(time_s[j])
param1_s_2.append(param1_s[j])
param2_s_2.append(param2_s[j])
lon_s_2.append(lon_s[j])
lat_s_2.append(lat_s[j])
谢谢!
【问题讨论】:
标签: python list loops if-statement iteration