0

我有一大堆数据,有两个由日期和时间组成的列表,看起来像这样:

日期:年月日

时间:时:分:秒

所以我把它们分开并将每个放入一个单独的列表中:

year,month,day = [i.split("-")[0] for i in date], [i.split("-")[1] for i in date], [i.split("-")[2] for i in date]
hour,minute,second = [i.split(":")[0] for i in time], [i.split(":")[1] for i in time], [i.split(":")[2] for i in time]

现在我因为每一个都是相同长度的长列表,我想将它们转换为一个包含它们作为datetime对象的列表。所以我为此使用了另一个列表理解:

datetime_column = [datetime.datetime(int(y),int(m),int(d),int(h),int(m),int(s)) for y,m,d,h,m,s in year,month,day,hour,minute,second]

这给了我以下错误:

ValueError: too many values to unpack

我知道这是因为它试图在每个列表中迭代 y、m、d、h、m 和 s,而不是仅仅将它们配对,例如 y 与年、m 与月等。所以这是我的问题:

您如何使用 6 个变量的列表推导,每个变量都经过 6 个单独列表中的 1 个?如果不可能,那么做等效的有效方法是什么?

4

2 回答 2

6

你把事情弄得太复杂了。压缩datetime列表,然后使用datetime.datetime.strptime()

datetime_column = [datetime.datetime.strptime('{} {}'.format(d, t),
                                              '%Y-%m-%d %H:%M:%S')
                   for d, t in zip(date, time)]

zip()将每个date字符串与每个time字符串配对,然后我们使用每一对来创建一个完整的时间戳字符串,以由该strptime()方法解析。

于 2013-05-01T15:09:03.713 回答
0

尽管有更好的方法来完成您正在尝试做的事情,但这里是您实际提出的问题的答案:

datetime_column = [
    datetime.datetime(
        int(dt[0]),int(dt[1]),int(dt[2]),int(dt[3]),int(dt[4]),int(dt[5]))
            for dt in zip(year,month,day,hour,minute,second)]

或更简洁地说:

datetime_column = [
    datetime.datetime(*dt) for dt in
            (map(int, v) for v in zip(year,month,day,hour,minute,second))]
于 2013-05-01T15:23:19.057 回答