我需要开发一种算法,该算法能够计算从一个事件(将列表 Vec1 中存储的真实/假的存在)传递到另一个事件(具有副本的事件)的“天数”存储在列表 Vec2 中的True / False。这两个清单如下:
Vec1 = [True, False, False, False, False, True, True, True, False, True, True, True, False, True, False, True, False, False, False, True]
Vec2 = [True, False, False, True, True, True, False, True, False, True, True, True, False, True, True, True, True, False, False, True]
为了得到更好的解释,让我们说 Vec1 正在回答“约翰今天喝咖啡了吗?”并且 Vec2 正在回答“保罗今天喝了咖啡吗?”。所以,我想用这个指标得到的是在“约翰饮料”活动和“保罗饮料”活动之间经过的天数。逻辑结构如下:
1)在第一个向量中找到值“True”,从那天开始计数; 2)继续计数直到你在第二个向量中找到“真”,从那一刻起重置计数器。
填写空的结果列表:
ValueInd = []
到目前为止,我已经能够建立起来了:
trueVector1 = 0
trueVector2 = 0
countAct = False
Count = 0
while len(ValueInd) < len(Vec1):
while Vec1[trueVector1] == False:
ValueInd.append(Count)
trueVector1 += 1
countAct = True
trueVector2 = trueVector1
while countAct == True:
if Vec2[trueVector2] == True:
countAct = False
ValueInd.append(Count)
Count = 0
trueVector1 = trueVector2 + 1
else:
ValueInd.append(Count)
trueVector2 += 1
Count += 1
除了现在算法的可怕结构(我稍后会修改),我无法得到一个正确的解决方案,因为这个不起作用。根据我上面提供的数据,正确的输出应该是:
ValueInd = [0,0,0,0,0,0,0,1,1,2,1,1,0,1,2,1,0,0,0,0]
我实际获得的输出是:
ValueInd = [0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0]
任何人都可以帮助我吗?请询问您是否需要进一步解释。
示例 约翰在第15天,第5天,第5天,第8天,第10天喝咖啡。保罗在第2天,第4天,第7天,第8天,第11天在15天的日历上喝咖啡。因此,有生命力的载体是:
John = [T, F, F, F, T, T, F, F, T, F, T, F, F, F, F, F]
Paul = [F, F, T, F, T, F, F, T, T, F, F, T, F, F, F, F]
此示例中的结果向量为:
Days = [0, 1, 2, 0, 0, 0, 1, 2, 0, 0, 0, 1, 0, 0, 0, 0]
这是因为: 0)John喝酒而Paul没有,所以伯爵从0开始; 1)没有人喝咖啡,所以计数增加到1; 2)保罗喝酒,所以计数增加到2然后关闭; 3)没有计数被激活; 4)两种饮料,所以计数在同一天开始和结束时为0; 5)约翰喝酒,保罗没有:所以计数被激活并从零开始; 6)没有保罗喝酒的一天 - &gt; count = 1 7)保罗饮料 - &gt; count = 2并重置为0 8)两人都喝酒,所以计数从0开始,到同一天结束 9)John喝酒,所以计数从0开始 10)保罗喝酒,所以伯爵以1结束 11 - 15)没有饮料,所以计数总是零。
答案 0 :(得分:0)
以下作品,
def get_counts(Vec1, Vec2):
c = 0
counts = []
counting = False
for v1, v2 in zip(Vec1, Vec2):
counts.append(c)
if v1:
counting = True
c = 0
if v2:
counting = False
c = 0
if counting:
c += 1
E.g。
T = True
F = False
John = [T, F, F, F, T, T, F, F, T, F, T, F, F, F, F, F]
Paul = [F, F, T, F, T, F, F, T, T, F, F, T, F, F, F, F]
get_counts(John, Paul)
>> [0, 1, 2, 0, 0, 0, 1, 2, 0, 0, 0, 1, 0, 0, 0, 0]