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:定位特定值的开始和结束位置的主要内容,如果未能解决你的问题,请参考以下文章