假设我有一个2D列表:
#0 #1 #start #end #holiday
lst=[[1,'a', False, False, False],
[3,'b', False, False, False],
[7,'c', False, True, False],
[0,'c', False, False, True],
[13,'d',True, False, False],
[21,'e',False, False, False],
[31,'f',False, False, False]]
(注:这只是涉及时间的更大列表的一个非常简化的版本。开始是一周的开始,结束是一周的结束,这是布尔值)
到目前为止,我得到的是它遍历列表,如果start为False,它计算当前#0值和前一行#0值之间的差值,并以diff, D
格式将其附加到当前行。你知道吗
如果start为true,则返回前一行的End值,如果为true,则计算当前行的#0和前一行的#0之间的差值,并以diff, W
格式附加到当前行。如果前一个结尾为false,那么它只会附加No end defined
。以下是我的代码:
for row in lst:
row_index = lst.index(row)
if row_index == 0:
row.append('x')
if row[2]==False: # if not start of week
valBefore = lst[row_index-1][0]
valCurrent = lst[row_index][0]
diff = valCurrent-valBefore
row.append(str(diff)+', D')
else:
if lst[row_index-1][3] == True:
valBefore = lst[row_index-1][0]
valCurrent = lst[row_index][0]
diff = valCurrent - valBefore
row.append(str(diff)+', W')
else:
row.append('No end defined')
我想做的是,如果Start为true,但是前一个End为False,Holiday为true,它会检查前一个End是否为true,如果为true,它会计算该行的列0和当前行的列0之间的差值。如果该结束为假,假日为真,它将转到该结束之前的行并检查该结束,依此类推。你知道吗
我被困在这里的逻辑,我不知道去哪里,如何做到这一点,希望这是有意义的。如果有人能给我指出正确的方向,我会非常感激的!你知道吗
我的预期结果:
lst=[[1,'a', False, False, False, ''],
[3,'b', False, False, False, '2, D'],
[7,'c', False, True, False, '4, D'],
[0,'c', False, False, True, 'Holiday'],
[13,'d',True, False, False, '6, W'],
[21,'e',False, False, False, '8, D'],
[31,'f',False, False, False, '10, D']]
对于这样的问题,我建议您使用
pandas
:一种简化方法是使用^{} ,它允许您根据条件的结果选择值。以下操作应根据需要执行:
相关问题 更多 >
编程相关推荐