【问题标题】:How to get the latest date from a list of tuples?如何从元组列表中获取最新日期?
【发布时间】:2021-06-17 15:20:10
【问题描述】:

我有一个如下所示的列表:

[(0, '2015-10-08'), (1, '2020-11-17'), (2, '2006-09-14'),....]

我想退回日期最晚的,我该如何实现?

我试过了:

a= [(0, '2015-10-08'), (1, '2020-11-17'), (2, '2006-09-14')]
print(max(a))

但这会返回 (2, '2006-09-14') ,我很困惑,这是为什么呢?谢谢。

【问题讨论】:

  • 因为它们已经在 YYYY-mm-dd 中,只需对字符串进行排序并选择最后一项

标签: python python-3.x list datetime tuples


【解决方案1】:

默认的 max 函数作用于元组的第一个元素。您可以通过max(a, key=lambda x: x[1]) 将其设置为第二个元素

【讨论】:

    【解决方案2】:

    试试这个:

    print(max(a, key=lambda x: datetime.datetime.strptime(x[1], '%Y-%m-%d')))
    

    你可以使用带key参数的max()函数根据一个函数获取最大元素。

    【讨论】:

    • 您好,谢谢,看起来它在没有datetime 的情况下也可以工作。
    • 你是对的,不需要日期时间,因为格式已经是 Y-M-D。但在不同的情况下可能需要它。
    【解决方案3】:

    比较元组时,默认行为是比较它们的第一个元素,如果有平局,则比较第二个元素,依此类推。所以当你调用max([(0, '2015-10-08'), (1, '2020-11-17'), (2, '2006-09-14')]) 时,你会得到 (2, '2006-09-14'),因为它有最大的第一个元素。

    您需要将自定义函数传递给内置 max 函数的 key 参数,以使其在日期上进行比较:

    >>> from datetime import datetime
    >>> arr = [(0, '2015-10-08'), (1, '2020-11-17'), (2, '2006-09-14')]
    >>> max(arr, key=lambda item: datetime.strptime(item[1], "%Y-%m-%d"))
    (1, '2020-11-17')
    

    【讨论】:

      【解决方案4】:

      当您使用 max(a) 时,它会返回元组中的最大第一个元素,即 2。因此,max(a) = (2, '2006-09-14') 我建议你这个代码:

      import numpy as np
      list_dates=[]
      for i in np.arange(len(a)):
          list_dates.append(a[i][1])
      max(list_dates)
      

      返回

      '2020-11-17'
      

      【讨论】:

        【解决方案5】:

        在您使用max 函数的代码中,它比较每个元组的第一个元素并给出结果。

        我希望下面的代码示例能满足您的用例 -

        a= [(0, '2015-10-08'), (1, '2020-11-17'), (2, '2006-09-14')]
        n=len(a)
        max_date=a[0][1]
        for i in range(1,n):
            date=a[i][1]
            if(max_date < date):
                max_date=date
        print(max_date)
        

        【讨论】:

          【解决方案6】:

          max(a) 是查看第零个元素并找到最大值,即 2。您只想查看带有日期的元素,因此您需要 a[[i[1] for i in a].index(max([i[1] for i in a]))]

          这可能看起来有点混乱,因为它都在一条线上。

          基本上它的作用是这样的:

          您想创建一个列表 b 仅包含日期元素。 b = [i[1] for i in a].

          然后找到该列表的最大值的索引。 max_index = b.index(max([i[1] for i in a])),返回 '1',所以我们知道它是位置 1 的元素。

          最后,你需要得到a[1],a的位置1的元素。

          所以所有这些都是a[[i[1] for i in a].index(max([i[1] for i in a]))]。 ?

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2019-02-03
            • 1970-01-01
            • 2018-03-12
            • 2020-08-16
            • 2021-03-31
            • 2020-11-06
            • 2014-07-14
            相关资源
            最近更新 更多