Я пытаюсь разрезать подсписки (arr
), используя элементы из других подсписков (slc
). Я использую Питон. Мой код работает нормально, если в подсписках для разрезания нет повторяющихся значений (arr
). В противном случае я не смогу получить правильные куски.
arr[0]
необходимо нарезать с помощью slc[0]
, arr[1]
необходимо нарезать с помощью slc[1]
и arr[2]
необходимо нарезать с помощью slc[2]
.
Вот пример и код, который я использую прямо сейчас:
arr=[[5, 9, 8, 1, 0, 10, 11, 5], [13, 4, 13, 2, 5, 6, 13], [8, 25, 13, 9, 8, 7]]
slc=[[0, 5], [5, 13], [13, 7]]
rslt=[]
for i in range(len(arr)):
rslt.append(arr[i][arr[i].index(slc[i][0]):arr[i].index(slc[i][1])+1])
текущий результат:
rlst=[[], [], [13, 9, 8, 7]]
ожидаемый результат:
rlst=[[0, 10, 11, 5], [5, 6, 13], [13, 9, 8, 7]] #expected results
Мой текущий код не работает для arr[0]
и arr[1]
, поскольку в slc[0]
и slc[1]
есть несколько элементов из arr[0]
и arr[1]
соответственно, поэтому процедура нарезки не работает должным образом.
list.index()
позволяет указать начальный индекс, с которого нужно начать поиск. Поэтому используйте индекс первого элемента в качестве аргумента при поиске конечного индекса.
for a, (start, end) in zip(arr, slc):
slice_start = a.index(start)
slice_end = a.index(end, slice_start + 1)
rslt.append(a[slice_start:slice_end + 1])
Какая версия Python имеет list.rindex
?
Я сделал неверную догадку, что он будет, потому что str.rindex
существует.
arr=[ [5, 9, 8, 1, 0, 10, 11, 5], [13, 4, 13, 2, 5, 6, 13], [8, 25, 13, 9, 8, 7]]
slc=[[0, 5] , [5, 13], [13, 7]]
rslt=[]
for i, x in enumerate(arr):
# start index
st_idx = x.index(slc[i][0])
# create a sub list from start index to rest of the list
sub = x[st_idx:]
# end index is taken from the sublist
end = sub.index(slc[i][1])
# end index is taken as end + 1 as you need end value to be in the list
rslt.append(sub[:end+1])
print(rslt)
# Output : [[0, 10, 11, 5], [5, 6, 13], [13, 9, 8, 7]]
Что, если
5
после0
встречается несколько раз? Вы хотите пойти к последнему или к первому?