如何在检测到一个“0”后打印 'end' 的一个值并恢复到检测“1”

How do i print one value of 'end' after detecting one '0' and revert back into detecting '1's

我目前的代码

所以现在基本上这是我的代码,我只希望在我的 excel sheet 中检测到值 0 时打印一个 'end'。我想要的主要输出是当值为“1”时,就像这张图片(主要输出)中一样,但没有那么多 'end's.

#Duration loop
for i in range(len(dfDur01Mar22)):
    #only display bus 'SG3079S'
    if dfDur01Mar22.iloc[i,1] == 'SG3079S':
        #print 'end' when first '0' appears
        if dfDur01Mar22.iloc[i,2] == 0:
           print('end')
        #if charging type is 1
        elif dfDur01Mar22.iloc[i,2] == 1: print(dfDur01Mar22.iloc[i,0],dfDur01Mar22.iloc[i,1],dfDur01Mar22.iloc[i,2])

主要输出

我相信评论中的@TimRoberts 给出了正确的答案,我将通过向您展示如何使用它来扩展它。

由于没有你的文件,我稍微修改了你的代码,但概念才是最重要的。您使用一个简单的 bool 变量作为标记,并检查它是否已设置,如果未设置,则 运行 剩下的检查最终值。根据您提供的信息,这可能是解决此类问题的最佳方法。代码:

import random


dfDur01Mar22 = []
for i in range(0,20):
    chargingType = random.choice([0, 1, 1])
    dfDur01Mar22.append(['', 'SG3079S', chargingType])





foundEnd = False

#Duration loop
for i in range(len(dfDur01Mar22)):
    #only display bus 'SG3079S'
    if dfDur01Mar22[i][1] == 'SG3079S':
        #print 'end' when first '0' appears
        if not foundEnd and dfDur01Mar22[i][2] == 0:
            print('end')
            foundEnd = True
        #if charging type is 1
        elif dfDur01Mar22[i][2] == 1:
            print(dfDur01Mar22[i][0],dfDur01Mar22[i][1],dfDur01Mar22[i][2])

输出示例:

With check  :   Without check

SG3079S 1       SG3079S 1
SG3079S 1       SG3079S 1
SG3079S 1       SG3079S 1
SG3079S 1       end
end             end
SG3079S 1       SG3079S 1
SG3079S 1       end
SG3079S 1       SG3079S 1
SG3079S 1       end
SG3079S 1       SG3079S 1
SG3079S 1       SG3079S 1
SG3079S 1       end
                end
                SG3079S 1
                SG3079S 1
                SG3079S 1
                SG3079S 1
                SG3079S 1
                SG3079S 1
                SG3079S 1