Учитывая два элемента в упорядоченном списке, я хочу создать новый список, состоящий из всего, что находится между этими элементами (включая их). Проблема возникает, если вторая точка находится перед первой точкой в списке. справа мой существующий отсортированный список объектов. rt - начальная граница, а rb - конечная граница. new_right = right[right.index(rt): right.index(rb) + 1]
Этот фрагмент работает за исключением случая
right = [a, rb, c, rt, d, e]
, где я получаю [rt, d, e]
вместо обернутого [rt, d, e, a, rb]
Есть ли способ сделать это без создания сложного метода? Проблемы некоторых людей были решены путем понимания списка. Посмотрев на это, я смог придумать
begin = right.index(rt)
end = right.index(rb)
if end > begin:
new_right = right[begin: end + 1]
else:
new_right = [right[i % r_len] for i in range(begin, r_len + end + 1)]
, который мне кажется довольно уродливым, но, похоже, выдерживает мои тесты. Есть ли лучший способ сделать это?
РЕДАКТИРОВАТЬ: было два рабочих решения для этого.
rbegin = right.index(rt)
rend = right.index(rb)
if rend >= rbegin:
new_right = right[rbegin: rend + 1]
else:
new_right = [right[i % r_len] for i in range(rbegin, r_len + rend + 1)]
Что непристойно сложно по сравнению с:
if rend > rbegin:
new_right = right[rbegin: rend + 1]
else:
new_right = right[rbegin:] + right[:rend + 1]