为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 python 中打印 For 循环输出的 “nth” 值

如何在 python 中打印 For 循环输出的 “nth” 值

肥皂起泡泡 2022-08-25 14:54:16
所以我想知道是否有办法从For Loop输出中打印第n个值(不是最后一个值)。例如:假设我只想打印 For Loop 输出中的“倒数第五”值或“倒数第三”值。任何想法我怎么能这样做?我是编码/python的新手,在进行大量研究和学习之后,我正在构建此代码。所以任何帮助赞赏。目前,下面的代码给了我最后一个值。from datetime import timedelta, datedef daterange(start_date, end_date):    for n in range(int(start_date.day), int((end_date - start_date).days), 90):        yield start_date + timedelta(n)start_date = date(2016, 1, 1)end_date = date.today()for single_date in daterange(start_date, end_date):    x = single_date.strftime("%Y-%m-%d")print(x)
查看完整描述

3 回答

?
元芳怎么了

TA贡献1798条经验 获得超7个赞

该技术是将结果累积到容器中,然后将第 n 个元素打印回来。


一种可能性是使用 maxlen 值设置为 n 的 collections.deque()。


from datetime import timedelta, date

from collections import deque


def daterange(start_date, end_date):

    for n in range(int(start_date.day), int((end_date - start_date).days), 90):

        yield start_date + timedelta(n)


window = deque([], maxlen=5)

start_date = date(2016, 1, 1)

end_date = date.today()

for single_date in daterange(start_date, end_date):

    x = single_date.strftime("%Y-%m-%d")

    window.append(x)


print(window[0])

上面的代码输出第五个最旧的条目。


2018-12-17

上面的代码在宽度为 5 的滑动窗口中累积最新的值。位置 0 处的最早值和位置 -1 处的最新值。


您可以将 5 更改为所需的 n 的任何值。


希望这有帮助:-)


查看完整回答
反对 回复 2022-08-25
?
尚方宝剑之说

TA贡献1788条经验 获得超4个赞

可以在循环时使用枚举,从而提供迭代计数。您可以根据需要打印的值在内部提供条件,如下所示:


from datetime import timedelta, date


def daterange(start_date, end_date):

    for n in range(int(start_date.day), int((end_date - start_date).days), 90):

        yield start_date + timedelta(n)


start_date = date(2016, 1, 1)

end_date = date.today()

n=5

length =len(list(daterange(start_date, end_date)))


for i,single_date in enumerate(daterange(start_date, end_date)):

    x = single_date.strftime("%Y-%m-%d")

    if i == length-n:

        print(x)


查看完整回答
反对 回复 2022-08-25
?
婷婷同学_

TA贡献1844条经验 获得超8个赞

可以使用切片仅按索引获取某些元素。但是,切片不适用于生成器,因此您需要将其转换为列表。


from datetime import timedelta, date


def daterange(start_date, end_date):

    for n in range(int(start_date.day), int((end_date - start_date).days), 90):

       yield start_date + timedelta(n)


start_date = date(2016, 1, 1)

end_date = date.today()

for single_date in list(daterange(start_date, end_date))[4:]:

    x = single_date.strftime("%Y-%m-%d")

    print(x)

这将打印第 5 个(索引:4)到最后一个元素。


查看完整回答
反对 回复 2022-08-25
  • 3 回答
  • 0 关注
  • 133 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信