【问题标题】:comparing and appending python lists of different lengths比较和附加不同长度的python列表
【发布时间】:2018-12-07 21:26:16
【问题描述】:

我有两个时间列表(time 有 140 个不同时间戳的元素,sessionStart 有 13 个元素记录试验的开始)。我需要比较这两个列表来找出time 中的每个元素何时大于sessionStart 中的第一个元素但小于sessionStart 中的第二个元素。如果匹配到空列表start,则代码应该附加sessionStart 的第一个元素。运行时,start 保持为空

x = 0
while x < len(time):
    i = 0
    while i < len(sessionStart)-1 and x < len(time):
        if time[x] >= sessionStart[i] and time[x] < sessionStart[i+1]:
            start.append(sessionStart[i])
            i += 1
        else:
            x += 1

【问题讨论】:

  • 你在哪里宣布开始名单?

标签: python list append comparison


【解决方案1】:

start 列表必须在您使用它之前声明,并且应该在您正在使用的任何循环之外,否则它将被覆盖。

您还可以使用几个 python 函数更简单地遍历这些列表:

    start = []

    for element in time:
        for i in range(len(sessionStart)-1):
            if element >= sessionStart[i] and element < sessionStart[i+1]:
                start.append(sessionStart[i])
  • for x in my_list 将遍历每个元素(可以是 在名为my_list 的列表中与变量x) 一起使用。
  • for in range(value) 从 0 迭代到 (value-1) 的长度,所以 无需使用索引变量,每次都加1

此外,如果您尝试比较时间戳,您应该使用 datetime library 将它们转换为日期时间对象

例如,如果您的时间戳是“2018-08-15”,您可以通过 datetime.datetime.strptime(timestamp, '%Y-%m-%d') 将其转换为日期进行比较

所以在循环中使用,看起来像:

    from datetime import datetime
    start = []

    for timestamp in time:
        timestamp = datetime.strptime(timestamp, '%Y-%m-%d')
        for i in range(len(sessionStart)-1):
            if timestamp >= datetime.strptime(sessionStart[i], '%Y-%m-%d')
                and timestamp < datetime.strptime(sessionStart[i+1], '%Y-%m-%d'):
            start.append(sessionStart[i])

当然,假设您的时间戳是 YYYY-MM-DD 格式,我确定它们不是,您必须根据您的时间戳格式更新格式字符串,您还可以获得秒、毫秒,分钟等,在上面的链接中

【讨论】:

  • 非常感谢您的帮助!时间戳为 YYYY-MM-DD、HH:MM:SS 格式。我查看了上面的链接,但我不确定如何在我的代码中格式化它
  • 我也试过你的方法,它似乎有效,但开始列表的长度只有 125,而它应该与时间列表的长度相同,即 140
猜你喜欢
  • 2017-12-24
  • 1970-01-01
  • 2021-03-18
  • 2021-02-25
  • 2018-07-03
  • 2019-02-17
  • 2023-01-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多