def remove_range(array, from_index, to_index):
new = []
for i in array:
if i < array[from_index] or i >= array[to_index]:
new.append(i)
return new
array = [9, 2, 2, 4, 6]
from_index = int(input("Enter a starting point: "))
to_index = int(input("Enter an end point: "))
print(remove_range(array, from_index, to_index))
Цель здесь — удалить из списка все элементы между двумя индексами (включая первый индекс, но исключая второй). Выше вы видите, что я пытался сделать до сих пор, и это, похоже, не работает. Я думаю, это как-то связано со тем, что я сравниваю числа с числами, а не индексы с индексами. Однако я понятия не имею, как правильно применить это на практике прямо сейчас. Кто-нибудь может помочь?
Изменить: любые встроенные функции Python для списков, кроме добавления, не допускаются. Использование квадратных скобок, безусловно, хорошо, но я хотел бы избежать использования двоеточия.
Решение проблемы
В вашем коде iнет index. Это элемент массива. Если вы хотите выполнять логику на основе индексов, используйте явный индекс. Например:
def remove_range(array, from_index, to_index):
new = []
for i in range(len(array)):
if i < from_index or i > to_index:
new.append(array[i])
return new
array = [9, 2, 2, 4, 6]
from_index = 1
to_index = 3
print(remove_range(array, from_index, to_index)) # [9, 6]
Обычно явные индексы предоставляются через enumerate():
def remove_range(array, from_index, to_index):
new = []
for i, el in enumerate(array):
if i < from_index or i > to_index:
new.append(el)
return new
Все это можно было бы записать более кратко как понимание списка:
def remove_range(array, from_index, to_index):
return [e for i, e in enumerate(array) if i < from_index or i > to_index]
Но еще лучше использовать нарезку и объединение списков с помощью +:
def remove_range(array, from_index, to_index):
return array[:from_index] + array[from_index+to_index:]
Комментариев нет:
Отправить комментарий