Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从3开始遍历列表_Python_Python 3.x - Fatal编程技术网

Python 从3开始遍历列表

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={}

我想根据开始日期分配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={}
    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