То, что я пытаюсь сделать, это создать окончательную функцию inbounds, которая потребляет список значений int (значения) и двух целых чисел ниже и выше. Он производит целое число от общего числа в значениях, которые меньше, чем ниже и выше верхнего. Он также мутирует ценности. Если в значениях, меньших, чем ниже, есть значение int, оно будет мутировать это значение, чтобы опуститься, и существует ли значение int в значениях, превышающих верхний, оно изменит это значение на верхний. ex: listin = [- 3,82,105,86, -10,119,100,70] inbounds (listint, 0, 100) => 4, а v мутируется до [0,82,100,86,0,100,100,70].Python: списки, мутация, проблема рекурсии
Так я пытался две вещи до сих пор:
Первое, что я попытался является:
def inbounds(values, lower, upper):
if values == []:
return 0
elif lower <= values[0] <= upper:
return inbounds(values[1:], lower, upper)
elif lower > values[0]:
values[0] = lower
return inbounds(values[1:], lower, upper) + 1
else:
values[0] = upper
return inbounds(values[1:],lower, upper) + 1
Это вернет 4, но проблема состоит в том, что я понял, что это только мутировать значения [ 0] так, то я попробовал мой 2-ой попытки решить эту проблему, создав другую функцию, которая имеет поз вместо 0 и добавить 1 к Pos каждый раз, когда она рекурсивно:
def inbounds_from(values, lower, upper, pos):
if pos < len(values):
return 0
elif lower <= values[pos] <= upper:
return inbounds(values, lower, upper, pos+1)
elif lower > values[pos]:
values[pos] = lower
return inbounds(values, lower, upper, pos+1) + 1
else:
values[pos] = upper
return inbounds(values,lower, upper, pos+1) + 1
def inbounds(values, lower, upper):
inbounds_from(values, lower, upper, 0)
Проблема с это что inboun ds ничего не делает !!? Зачем? Я не получаю 4, когда я тестирую пример, и я получаю исходный список без каких-либо мутаций ...
Редактировать: Также я попытался изменить базовый случай pos < = len (значения), и это все еще не работа
Вашего попутный ломтик вашего список каждого рекурсивный вызов, который возвращает копию исходного списка. Вы не увидите изменений в исходном списке. Попробуйте использовать итерацию, способ Python сделать это, или если вы должны использовать рекурсию, попробуйте передать текущий индекс и увеличивать с базовым регистром 'index == len (значения)' –
Извините, не видел, что вы уже пытались сделай это. Вероятно, проблема заключается в том, что вам не хватает возврата в вашу функцию обертки. Это должно быть мутирование оригинала, но я далеко от своего компьютера и не могу играть с ним в данный момент. –
Ах. Ваш базовый случай ошибочен. Он никогда не проходит мимо блока if, потому что он должен быть 'if pos> = len (values)', если вы хотите начать с индекса 0 и подсчитывать ... –