【问题标题】:How do you run a for loop in a list of lists to work with datetime?如何在列表列表中运行 for 循环以使用日期时间?
【发布时间】:2021-05-15 03:16:59
【问题描述】:

我有一个列表列表:

[['2020', '05', '20', '22', '24', '16.7929'],
 ['2020', '05', '29', '05', '50', '12.4465'],
 ['2020', '05', '29', '06', '44', '34.1706']]

我想访问每个元素,以便可以使用此功能:

for x in list:
   for a, b, c, d, e, f in x:
       dt.datetime(int(a), int(b), int(c), int(d), int(e), round(float(f)).timestamp()

但是,作为字符串列表的列表,它仅解包每个列表的第一个元素 (2020) 并将其分解为单个字符。但是,我还了解到,您根本无法遍历这样的整数列表。你是怎么做到的?

【问题讨论】:

    标签: python list loops datetime


    【解决方案1】:

    在您对列表进行迭代时解包,无需在解包之前先对其进行迭代

    for a, b, c, d, e, f in list:
        dt.datetime(int(a), int(b), int(c), int(d), int(e), int(f)).timestamp()
    

    您的列表中缺少秒数,并且无法转换为日期时间

    【讨论】:

    • for i in list:datetime.datetime(*map(int, i)) 会是一个更简单的选择
    • 谢谢,我在清理数据时搞砸了我删除了最后一个元素中的句点,这就是它有这么多字符的原因。不知道我是否应该更改它,因为有人已经回答了
    • @python_user True,专注于迭代和元组解包。介绍map 可能只会增加混乱:)
    • 这很公平:)
    • 我稍微改变了这个例子,这样如果你想改变你的代码就有一个秒值
    【解决方案2】:
    for x in list:
      dt.datetime(int(x[0]), int(x[1]), int(x[2]), int(x[3]), round(float(x[4])), int(x[5])).timestamp()
    

    【讨论】:

    • 我稍微改变了我的例子,如果你想改变你的答案,最后一项是有效的
    【解决方案3】:

    我相信对于像for a, b, c, d, e, f in x: 这样的解包功能有些混淆。

    当你写for a, b, c, d, e, f in x:时,这被解释为:对于x中的每个元素,解压到元组(a, b, c, d, e, f)

    这就是为什么您的 Python 解释器会尝试将 "2020" 分解为 (a, b, c, d, e, f)

    你需要的是:对于list中的每个元素,解压成元组(a, b, c, d, e, f),翻译成:

    for a, b, c, d, e, f in list:
        dt.datetime(int(a), int(b), int(c), int(d), int(e), int(f)).timestamp()
    

    另外,正如其他人所提到的,您的代码还有一些问题。

    【讨论】:

    • 我稍微改变了这个例子,这样如果你想改变你的代码就有一个秒值
    猜你喜欢
    • 1970-01-01
    • 2021-02-28
    • 2019-01-15
    • 2011-05-04
    • 1970-01-01
    • 2021-08-27
    • 2022-01-06
    相关资源
    最近更新 更多