Python for循环:为列表中的每个元素运行函数,确定7天的范围

Python for循环:为列表中的每个元素运行函数,确定7天的范围,python,for-loop,Python,For Loop,我有两个列表,一个是日期(list\u dates),格式为mm/dd/yyyy,另一个是字符串列表(my\u list)。 例如: 我需要为my_list中的所有项目运行一个函数,从开始日期算起7天内,具体如下: 开始日期前三天 开始日期后三天 在示例中: “my_string1”的开始日期为2020年11月20日 “my_string2”的开始日期为2019年12月12日 “my_string3”的开始日期为2019年12月7日 我需要的代码结构应该是: 选择my_列表中的第一项

我有两个列表,一个是日期(
list\u dates
),格式为mm/dd/yyyy,另一个是字符串列表(
my\u list
)。 例如:

我需要为
my_list
中的所有项目运行一个函数,从开始日期算起7天内,具体如下:

  • 开始日期前三天
  • 开始日期后三天
在示例中:

  • “my_string1”的开始日期为2020年11月20日
  • “my_string2”的开始日期为2019年12月12日
  • “my_string3”的开始日期为2019年12月7日
我需要的代码结构应该是:

  • 选择
    my_列表中的第一项
  • 列表_日期
    中选择其
    开始日期
  • 按如下方式计算周范围:将
    start_date
    取为
    x
    ,然后计算
    x+3
    x-3
    。这将给它一周的范围
  • 运行函数
    f
    ,其中
    start=start\u date
    end=start
  • 收集结果
  • 然后运行函数f,其中
    start=start_date-1
    end=start
  • 收集结果;
  • 运行函数
    f
    ,其中
    start=start_date-7
    end=start
  • 收集结果
  • 选择
    my_列表中的第二项
  • 列表_日期
    中选择其
    开始日期
  • 按如下方式计算周范围:将
    start_date
    取为
    x
    ,然后计算
    x+3
    x-3
    。这将给它一周的范围
  • 运行函数
    f
    ,其中
    start=start\u date
    end=start
  • 收集结果
  • 然后运行函数
    f
    ,其中
    start=start\u date-1
    end=start
  • 收集结果;
  • 运行函数f,其中
    start=start_date-7
    end=start
  • 收集结果 ... 并根据列表中的所有元素重复
我试着这样做:

from datetime import datetime, timedelta

date_range = 3

for i in my:_list: 
    for t in list_dates:
        t = datetime.strptime(t, '%m/%d/%Y')
        before_dates = [ t - timedelta(i) for i in range(1,date_range+1)]
        after_dates =  [ t  + timedelta(i) for i in range(1,date_range+1)]   
        
        start=t
        end=start

    f(start, end, i)

但是循环并没有像我预期的那样工作,也就是说,它没有像我在上面的项目符号中描述的那样工作。

这就是你要找的吗?这是您的代码,但选择每个
my_list
条目的完整七天范围及其从
list_dates
开始的相应日期作为其中心日期(我添加了
fun
功能只是为了打印澄清):

输出为

my_string1
2020/11/17 2020/11/17 my_string1
2020/11/18 2020/11/18 my_string1
2020/11/19 2020/11/19 my_string1
2020/11/20 2020/11/20 my_string1
2020/11/21 2020/11/21 my_string1
2020/11/22 2020/11/22 my_string1
2020/11/23 2020/11/23 my_string1
my_string2
2019/12/09 2019/12/09 my_string2
2019/12/10 2019/12/10 my_string2
2019/12/11 2019/12/11 my_string2
2019/12/12 2019/12/12 my_string2
2019/12/13 2019/12/13 my_string2
2019/12/14 2019/12/14 my_string2
2019/12/15 2019/12/15 my_string2
my_string3
2019/07/09 2019/07/09 my_string3
2019/07/10 2019/07/10 my_string3
2019/07/11 2019/07/11 my_string3
2019/07/12 2019/07/12 my_string3
2019/07/13 2019/07/13 my_string3
2019/07/14 2019/07/14 my_string3
2019/07/15 2019/07/15 my_string3

请更加简洁,显示您的列表,显示您的功能
fun
(分别为
fun1
)。iterable对象
测试中有什么?如果只有伪字符串,您如何浏览
my_list
的项目?请提供一个简单的工作示例代码中的
start\u date和end\u date
变量在哪里?我更新了显示所有步骤的问题。我希望它能更清楚一点。嗨,格林,是的。但是我在约会时间上遇到了一些问题。在我的函数中,我应该需要按如下方式确定日期范围:f(s:'+start_date+',e:'+end_date+'&…),但当我运行代码时,我得到了以下错误:TypeError:只能将str(而不是“datetime.datetime”)连接到str。我如何更改该值(函数中的格式应为mm/dd/yyyy?是否应将其转换为字符串?您好,我刚刚重新编写了它,它对我来说运行良好。错误发生在哪一行?我对其进行了一些简化,删除了打印中的元组(我猜错误可能发生在那里)。即使在清除内核后,它也对我有效。我认为使用我的函数的错误是我通过2019-07-09T00:00:00而不是2020年7月9日,你能最终将其包含在你的代码中吗?是的,你做到了。非常感谢!
from datetime import datetime, timedelta

date_range = 3

my_list=['my_string1', 'my_string2', 'my_string3']
list_dates=['11/20/2020','12/12/2019','07/12/2019']

def fun(start_date, end_date, my_string):
    print(start_date, end_date, my_string)
    return

for i in range(len(my_list)): 
    print(my_list[i])
    #for t in list_dates:
    t = list_dates[i] # assume my_list and list_dates always correspond index-wise
    start_date = t
    end_date = t
    t = datetime.strptime(t, '%m/%d/%Y')
    #before_dates = [ t - timedelta(i) for i in range(date_range, 0, -1)]
    #after_dates =  [ t  + timedelta(i) for i in range(1, date_range+1)]
    ba_dates = [ t - timedelta(i) for i in range(date_range, -date_range-1, -1)]

    for isd in range(len(ba_dates)):
        #print(ba_dates[isd])
        #print(ba_dates[isd].strftime('%Y/%m/%d'))
        fun(ba_dates[isd].strftime('%Y/%m/%d'), ba_dates[isd].strftime('%Y/%m/%d'), my_list[i])
my_string1
2020/11/17 2020/11/17 my_string1
2020/11/18 2020/11/18 my_string1
2020/11/19 2020/11/19 my_string1
2020/11/20 2020/11/20 my_string1
2020/11/21 2020/11/21 my_string1
2020/11/22 2020/11/22 my_string1
2020/11/23 2020/11/23 my_string1
my_string2
2019/12/09 2019/12/09 my_string2
2019/12/10 2019/12/10 my_string2
2019/12/11 2019/12/11 my_string2
2019/12/12 2019/12/12 my_string2
2019/12/13 2019/12/13 my_string2
2019/12/14 2019/12/14 my_string2
2019/12/15 2019/12/15 my_string2
my_string3
2019/07/09 2019/07/09 my_string3
2019/07/10 2019/07/10 my_string3
2019/07/11 2019/07/11 my_string3
2019/07/12 2019/07/12 my_string3
2019/07/13 2019/07/13 my_string3
2019/07/14 2019/07/14 my_string3
2019/07/15 2019/07/15 my_string3