Python 从3开始遍历列表
我想根据开始日期分配0-6。例如,如果星期三是开始日,我应该将星期三设置为0,然后将星期四设置为1,将星期五设置为2等等 这是我试过的Python 从3开始遍历列表,python,python-3.x,Python,Python 3.x,我想根据开始日期分配0-6。例如,如果星期三是开始日,我应该将星期三设置为0,然后将星期四设置为1,将星期五设置为2等等 这是我试过的 def date_manipulate(startday): #df['Month']=df.index.strftime("%B") temp_week=['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday'] week={}
def date_manipulate(startday):
#df['Month']=df.index.strftime("%B")
temp_week=['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday']
week={}
currentday=0
offset=temp_week.index(startday)
for day in temp_week:
if temp_week:
pointer=temp_week.index(day)+offset%len(temp_week)
if (pointer>=8):
pointer-=7
week[temp_week[pointer]]=currentday
currentday+=1
else:
break
return week
这并没有返回正确的数字(即:星期三是7),出于某种原因,它迭代了9次而不是7次。我还尝试从位置3[3:]开始切片索引,这将跳过前2个位置,这也不是我想要的。最终,我只是尝试将一周的开始日期更改为我定义的日期,而不是修复星期天,因此函数。一旦函数开始工作,我将执行某种if语句来循环默认的一周,并用这个新字典替换它。谢谢
default_week =['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']
def date_manipulate(startday):
week = {}
temp_week = default_week[startday:] + default_week[0:startday]
for index, day in enumerate(temp_week):
week[index] = day
return week
星期二作为起始日的输出(date\u(2)
)
{0:'星期二'、1:'星期三'、2:'星期四'、3:'星期五'、4:'星期六'、5:'星期日'、6:'星期一'}
编辑
如果您想在字典中找到tuday:0
而不是0:tuday
,请使用
week[day] = index
星期二作为起始日的输出(date\u(2)
)
{0:'星期二'、1:'星期三'、2:'星期四'、3:'星期五'、4:'星期六'、5:'星期日'、6:'星期一'}
编辑
如果您想在字典中找到tuday:0
而不是0:tuday
,请使用
week[day] = index
您在临时工作周中有
天:
,但这样做的唯一目的是,您可以通过临时工作周索引(天)
将天
转换为整数。您不使用day
进行任何其他操作
为什么这么复杂?对于范围(7)中的i,更简单的是,
,
然后用i
代替temp\u week.index(day)
接下来,temp\u week.索引(天)+偏移量%len(temp\u week)
将采用offset
模len(temp\u week)
,其计算结果仅为offset
,因为offset
始终至少为0且小于len(temp\u week)
;
然后将偏移量
添加到临时周索引(日)
,这当然有时会给出大于6的结果
注意运算符的优先级,必要时使用括号:
pointer = (temp_week.index(day) + offset) % len(temp_week)
当然,更好的方法是按照Evyatar的回答正确使用切片。你有
在临时工作周中的日期:
,但这样做的唯一目的是,你可以通过临时工作周索引(天)
将天
变成整数。您不使用day
进行任何其他操作
为什么这么复杂?对于范围(7)中的i,更简单的是,
,
然后用i
代替temp\u week.index(day)
接下来,temp\u week.索引(天)+偏移量%len(temp\u week)
将采用offset
模len(temp\u week)
,其计算结果仅为offset
,因为offset
始终至少为0且小于len(temp\u week)
;
然后将偏移量
添加到临时周索引(日)
,这当然有时会给出大于6的结果
注意运算符的优先级,必要时使用括号:
pointer = (temp_week.index(day) + offset) % len(temp_week)
当然,更好的方法是按照Evyatar的回答正确使用切片。这可以使用itertools来完成,使用
cycle
和dropwhile
。逻辑是cycle
将创建无限长的周列表,而dropwhile
将用于获取“周期”中的第一天:
输出
[('Wednesday', 0), ('Thursday', 1), ('Friday', 2), ('Saturday', 3), ('Sunday', 4), ('Monday', 5), ('Tuesday', 6)]
或者在函数中
def day_week(day='Wednesday'):
return list(zip(dropwhile(lambda x: x != target_day, week_cycle), range(7)))
使用itertools可以非常轻松地完成此操作,方法是使用
cycle
和dropwhile
。逻辑是cycle
将创建无限长的周列表,而dropwhile
将用于获取“周期”中的第一天:
输出
[('Wednesday', 0), ('Thursday', 1), ('Friday', 2), ('Saturday', 3), ('Sunday', 4), ('Monday', 5), ('Tuesday', 6)]
或者在函数中
def day_week(day='Wednesday'):
return list(zip(dropwhile(lambda x: x != target_day, week_cycle), range(7)))
您可以通过如下方式简化您的功能:
def date_manipulate(day):
temp_week=['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday']
i = temp_week.index(day)
return dict(enumerate(temp_week[i:] + temp_week[:i]))
>>> date_manipulate('Wednesday')
>>> {0: 'Wednesday', 1: 'Thursday', 2: 'Friday', 3: 'Saturday', 4: 'Sunday', 5: 'Monday', 6: 'Tuesday'}
>>> date_manipulate('Tuesday')
>>> {0: 'Tuesday', 1: 'Wednesday', 2: 'Thursday', 3: 'Friday', 4: 'Saturday', 5: 'Sunday', 6: 'Monday'}
您可以通过如下方式简化您的功能:
def date_manipulate(day):
temp_week=['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday']
i = temp_week.index(day)
return dict(enumerate(temp_week[i:] + temp_week[:i]))
>>> date_manipulate('Wednesday')
>>> {0: 'Wednesday', 1: 'Thursday', 2: 'Friday', 3: 'Saturday', 4: 'Sunday', 5: 'Monday', 6: 'Tuesday'}
>>> date_manipulate('Tuesday')
>>> {0: 'Tuesday', 1: 'Wednesday', 2: 'Thursday', 3: 'Friday', 4: 'Saturday', 5: 'Sunday', 6: 'Monday'}
您可以将列表拆分为两部分并将其连接起来
n = week.index(day)
new_week = week[n:] + week[:n]
在第二个子列表中,它上升到但不包括n您可以将列表拆分为两部分并将其连接起来
n = week.index(day)
new_week = week[n:] + week[:n]
在第二个子列表中,它上升到,但不包括n