Python List:定位特定值的开始和结束位置

Posted

技术标签:

【中文标题】Python List:定位特定值的开始和结束位置【英文标题】:Python List: locating starting and ending position of perticular value 【发布时间】: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,....]

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

【问题讨论】:

【参考方案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]

【讨论】:

以上是关于Python List:定位特定值的开始和结束位置的主要内容,如果未能解决你的问题,请参考以下文章

Python中的列表和元组

Python 列表(List)

python 在选定的控件上创建定位器,在原点的主定位器下设置,以帮助确保枢轴动画开始/结束道具

python之生成列表(Range和列表表达式)

python之生成列表(Range和列表表达式)

怎么查找python列表中元素的位置