【问题标题】:Python List: locating starting and ending position of perticular valuePython List:定位特定值的开始和结束位置
【发布时间】:2022-01-21 23:14:57
【问题描述】:

在我的过程中,我得到 1 或 0 作为我存储在列表中的结果。 例如:

Input Data: 
TestRun = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 ......]
Result = [0,0,0,0,1,1,1,0,0,0,1,1,1,.................]

现在,在这个无休止的过程中,我想存储 1 或 0 的开始和结束位置。

Expected Output Result: 
StartingPosZero = [1, 8,...]
EndingPosZero = [4, 10, .....]
StartingPosOne = [5, 11,.....]
EndingPosOne= [7, 13,....]

是否有人可以在不使用任何标准函数的情况下帮助我解决这个问题?

【问题讨论】:

    标签: arrays python-3.x list


    【解决方案1】:

    不确定这段代码的目的是什么,因为在 Python 中索引从 0 开始。这段代码肯定是重复的,但至少它完成了工作。无论如何,

    result = [0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1]
    StartingPosZero, EndingPosZero, StartingPosOne, EndingPosOne = [], [], [], []
    
    startingBit = result[0]
    StartingPosOne.append(1) if startingBit == 0 else StartingPosZero.append(1)
    
    for i in range(len(result)-1):
        currentBit = result[i]
        nextBit = result[i+1]
        if currentBit != nextBit:
            if currentBit != 0:
                EndingPosZero.append(i+1)
                StartingPosOne.append(i+2)
            else:
                EndingPosOne.append(i+1)
                StartingPosZero.append(i+2)
    
    endingBit = result[-1]
    EndingPosOne.append(len(result)) if startingBit != 0 else EndingPosZero.append(len(result))
    
    print(StartingPosZero)
    print(EndingPosZero)
    print(StartingPosOne) 
    print(EndingPosOne)
    

    【讨论】:

      【解决方案2】:

      使用列表理解:

      TestRun = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
      Result = [0,0,0,0,1,1,1,0,0,0,1,1,1]
      
      Result.insert(0,99)
      Result.insert(len(Result),99)
      
      StartingPosZeros=[ x+1 for x in range(len(Result)-1) if Result[x+1] != Result[x] if Result[x+1]==0]
      EndingPosZeros=[ x for x in range(len(Result)-1) if Result[x+1] != Result[x] if Result[x]==0]    
      StartPosOnes=[ x+1 for x in range(len(Result)-1) if Result[x+1] != Result[x] if Result[x+1]==1]    
      EndingPosOnes=[ x for x in range(len(Result)-1) if Result[x+1] != Result[x] if Result[x]==1]
      
      print(StartingPosZeros)
      print(EndingPosZeros)
      print(StartingPosOnes) 
      print(EndingPosOnes)
      

      输出:

      [1, 8]
      [4, 10]
      [5, 11]
      [7, 13]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-27
        • 1970-01-01
        • 2013-04-19
        • 2022-09-27
        • 1970-01-01
        相关资源
        最近更新 更多