#!/usr/bin/env python
new_trace=[1,2,2,3,2,1,4,3,2,1,3,4,3,5,6,4,7,6,5,4,5,4,6,6,5,6,4,4,5,6,7,7,6,5,5,7,6,5]
def extractIntervals(new_trace):
listofAppearances=[[new_trace[0]],[0],[-1]]
for i in range(0,len(new_trace)-1,1):
if new_trace[i] in listofAppearances[0]:
continue
else:
listofAppearances[0].append(new_trace[i])
listofAppearances[1].append(i)
listofAppearances[2].append(-1)
print(listofAppearances)
for j in range(len(new_trace)-1,0,-1):
for k in range(0,len(listofAppearances[0])-1,1):
if (new_trace[j]==listofAppearances[0][k]) and (listofAppearances[2][k]==-1):
listofAppearances[2][k]=j
else:
continue
print(listofAppearances)
def main():
extractLivenessIntervals(new_trace)
if __name__ == "__main__":
main()
В моем коде выше я пытаюсь извлечь интервалы появления (разделенные индексами 1-го и последнего появления каждого числа в списке). Я делаю это один раз, когда анализирую список, и если число все еще нене существует в listOfAppearances , затем я добавляю его к первому столбцу, индекс ко второму столбцу и задаю для 3-го столбца значение -1 .
Я разбираюснова список в обратном порядке, каждый элемент ищется в listofAppearances , и соответствующий 3-й столбец заменяется текущим индексом, если все еще установлен на -1.
Это работает, но первая итерацияпри разборе списка в обратном направлении возникает проблема, которую я не могу понять.результат, который я имею с этим примером списка:
[[1, 2, 3, 4, 5, 6, 7], [0, 1, 3, 6, 13, 14, 16], [-1, -1, -1, -1, -1, -1, -1]]
[[1, 2, 3, 4, 5, 6, 7], [0, 1, 3, 6, 13, 14, 16], [9, 8, 12, 27, 37, 36, -1]]
Как вы можете видеть, последний элемент второго списка все еще установлен в -1, что я не понимаю, почему!Я проверил каждый дюйм кода и не могу понять, почему это так!