加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python—指定日期,从用户登录列表中找出用户该日期最可能的地理

发布时间:2020-12-17 01:25:02 所属栏目:Python 来源:网络整理
导读:题目:指定日期,从用户登录列表中找出用户该日期最可能的地理位置 给定节点列表testlist,包含节点名、节点的出现日期、纬度、经度。 如果该日期并未在节点列表中出现,则查找该节点之前出现最近的日期,拷贝该行到新列表。如果之前未出现过,则取该日期之

题目:指定日期,从用户登录列表中找出用户该日期最可能的地理位置

给定节点列表testlist,包含节点名、节点的出现日期、纬度、经度。

如果该日期并未在节点列表中出现,则查找该节点之前出现最近的日期,拷贝该行到新列表。如果之前未出现过,则取该日期之后日期最近的一行拷贝。

最终每个节点都有一行出现在新列表。

这段代码可以估算出在指定时间,节点所处的位置。

= float(s_time)) and (float(log_time) < float(e_time)):
        return start_t
#函数定义结束
# 列表日期按从大到小排列(从近到远)
testlist = [
['0','2015-03-28',39.759765375,-104.984303125],['0','2015-03-27',39.70999875,-104.95675168749999],'2015-03-24',39.72202824,-104.96074968],'2015-03-23',39.77230825,-105.0435074375],'2015-03-01',39.77455175,-105.01426466666665],'2015-02-02',39.76241472,-104.90343176000002],['1',3.758066,-8],'2015-01-03',3.76085332653061,['2',29.894691000000005,-81.314517],['3','2015-02-03',['4','2015-03-03',]
n = len(testlist)
newlist = []
ID = testlist[0][0]     #将ID设为第一个节点
i = 0
j = -1
while i < n:
    """
    保证每一行都在选定日期列表中出现
    如果第一个日期小于指定日期,则取第一个
    如果刚好能找到相关日期(或者位于两个日期中间的时间),则取相关日期(或前一个)
    如果到该节点登陆日期的最后一行仍不匹配,取最后一行
    """
    if  i == n-1 and newlist[j][0] != ID:
        newlist.append(testlist[i])
        break
    count = 1   
    # i+count是当前要处理的结点  
    while i+count < n:  
        # 新列表为空,或者当前ID并未出现在列表,则查找添加
        if j == -1 or newlist[j][0] != ID:  
            # 如果新节点第一个日期符合条件(日期从大到小排列),则添加第一个   
            if  getBestTime(nowtime,testlist[i][1]):
                newlist.append(testlist[i])
                j += 1
                print ID,testlist[i-1][0]
            # 如果当前行和前一行属于同一节点,则取二者日期判断
            elif testlist[i+count][0] == ID and testlist[i+count-1][0] == ID:
                # 如果所求日期介于两者之间(大于等于后一个,小于前一个),则添加后一个更早的日期
                if getBestTime(nowtime,testlist[i+count][1],testlist[i+count-1][1]):
                    newlist.append(testlist[i+count])
                    j += 1
                    count+=1
                    break
                count += 1
            # 如果当前行的节点为新节点(同时原ID未添加),说明原ID最后一个日期最接近指定日期,添加该日期并更新ID
            elif testlist[i+count][0] != ID:
                newlist.append(testlist[i+count-1])
                j += 1
                ID = testlist[i+count][0]
                break
        # 当前行的ID已经在新列表中出现,跳出循环从下一个行开始。如果下一个为新节点,顺便则更新ID。
        else:
            if testlist[i+count][0] != ID:
                ID = testlist[i+count][0]
            break
    i = i+count
print newlist


(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读