当前位置: 首页 > 面试题库 >

在Python中遍历一系列日期

仉刚洁
2023-03-14
问题内容

我有以下代码可以做到这一点,但是我该如何做得更好呢?现在,我认为它比嵌套循环更好,但是当列表理解器中包含生成器时,它开始变得Perl-linerish

day_count = (end_date - start_date).days + 1
for single_date in [d for d in (start_date + timedelta(n) for n in range(day_count)) if d <= end_date]:
    print strftime("%Y-%m-%d", single_date.timetuple())

笔记
- 我实际上并没有用它来打印。这只是出于演示目的。
- 在start_dateend_date变量是datetime.date因为我不需要时间戳对象。(它们将用于生成报告)。

样本输出
开始日期为2019-05-30,结束日期为2019-06-09:

2019-05-30
2019-05-31
2019-06-01
2019-06-02
2019-06-03
2019-06-04
2019-06-05
2019-06-06
2019-06-07
2019-06-08
2019-06-09

问题答案:

为什么会有两个嵌套的迭代?对我来说,它仅需一次迭代即可生成相同的数据列表:

for single_date in (start_date + timedelta(n) for n in range(day_count)):
    print ...

而且没有列表被存储,只有一个生成器被迭代。同样,生成器中的“ if”似乎不必要。

毕竟,线性序列只需要一个迭代器,而不是两个。

与John Machin讨论后更新:

也许最优雅的解决方案是使用生成器函数完全隐藏/抽象日期范围内的迭代:

from datetime import timedelta, date

def daterange(start_date, end_date):
    for n in range(int ((end_date - start_date).days)):
        yield start_date + timedelta(n)

start_date = date(2013, 1, 1)
end_date = date(2015, 6, 2)
for single_date in daterange(start_date, end_date):
    print(single_date.strftime("%Y-%m-%d"))

注意:为了与内置range()函数保持一致,此迭代在到达之前停止end_date。因此,对于包容迭代,请使用第二天,就像使用一样range()



 类似资料:
  • 问题内容: 我想遍历一系列的日历日期,每次迭代为+1天。我将使用Java中围绕JodaTime构建的东西-NodeJS中是否有类似的东西? 问题答案: 您可以在node.js应用程序中使用moment.js。 然后,您可以很容易地做到这一点: 嗯…这看起来很像您已经在自己的答案中编写的代码。Moment.js是一个更受欢迎的库,具有大量功能,但是我想知道哪个库的性能更好?也许您可以测试并告诉我们。

  • 问题内容: 我创建了一个二维数组,如: 打印此列表将给出输出: 其中每个列表项都是“行,列”格式的字符串 现在给出此列表,我想按顺序迭代它: 依次遍历第一列和第二列,依此类推。我该如何循环? 此问题与纯python列表有关,而标记为相同的问题与numpy数组有关。他们明显不同 问题答案: 使用和。就像是:

  • 问题内容: 我有一个这样的清单清单。 现在,我需要遍历上面的列表并输出一个字符串列表,如下所示(原始列表中没有数字) 问题答案: 准确执行您指定的操作的最简单解决方案是: 这基本上等效于迭代版本: 但是,这并不是遍历具有任意维数的多维列表的通用方法,因为嵌套列表推导/嵌套的for循环可能很难看。但是,对于2或3维列表,您应该放心。 如果您确实决定需要平整3个以上的尺寸,我建议实现一个递归遍历函数,

  • 问题内容: 在Java中,我可以通过使用an ,然后使用迭代器的方法来删除迭代器返回的最后一个元素,如下所示: 我将如何在Python中执行此操作?我在for循环中遍历列表时无法修改列表,因为它会导致内容被跳过(请参阅此处)。而且似乎没有Java的等效接口。 问题答案: 遍历列表的 副本 :

  • 问题内容: 例如: 上面的代码不执行任何操作,因为条件不是通过引用获得的。正确的方法是什么? 问题答案: 您可以使用: 但是,总的来说,这些东西在使用辅助函数和列表理解时会更加干净: 应该注意的是,第二种解决方案不会适当地更新列表-换句话说,如果您对此列表有其他引用,则它们不会受到影响。如果需要,可以使用切片分配很容易地进行替换:

  • 问题内容: 我已经有一段时间没有编码了,并试图重新使用Python。我正在尝试编写一个简单的程序,通过将每个数组元素值相加来求和一个数组。这就是我所拥有的: 我收到以下错误: 我发现我想做的事情显然很简单: 但是很明显,我无论如何都不正确地遍历数组,我认为这是我需要为其他目的而正确学习的东西。谢谢! 问题答案: 当您像在数组中那样循环时,for变量(在此示例中)是数组的当前元素。 例如,如果你的就