Обновление переменной внутри цикла for не работает

в приведенном ниже коде я пытаюсь обновить значение сумма до (rsum - lsum - nums[i]) внутри цикла for, это дает мне неправильный результат. Но если я объявлю новое имя переменной и назначу ему значение (rsum - lsum - nums[i]), это даст мне правильный результат. В чем причина этого?

  1. Код, который дает неправильный вывод

    def pivotIndex(nums: List[int]) -> int:
        n = len(nums)
    
        if n == 1: return 0
    
        lsum = 0
        rsum = sum(nums)
    
        for i in range(n):
            rsum = rsum - lsum - nums[i]
            if lsum == rsum:
                return i
    
            lsum += nums[i]
    
        return -1
    
  2. Код, который дает мне правильный вывод

    def pivotIndex(nums: List[int]) -> int:
        n = len(nums)
    
        if n == 1: return 0
    
        lsum = 0
        rsum = sum(nums)
    
        for i in range(n):
            total = rsum - lsum - nums[i]
            if lsum == total:
                return i
    
            lsum += nums[i]
    
        return -1
    

Вы могли бы просто добавить загрузку операторов печати, чтобы увидеть значение total и rsum на каждой итерации? Это обычно помогает мне понять мой код, если я застрял.

Pam 18.03.2022 20:42

Во второй раз в вашем цикле rsum имеет исходное значение, если ваше второе решение и новое значение в вашем первом решении. Они делают совершенно разные вещи

Frank Yellin 18.03.2022 20:43

Если код 2 правильный, то, возможно, код 1 должен быть: 'rsum = rsum - nums[i]'. Таким образом, вы каждый раз вычитаете только текущее число из rsum.

quamrana 18.03.2022 20:45
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
3
33
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В строке 11, где вы получаете неправильный вывод, вы меняете значение rsum каждое, поэтому, когда вы это делаете (rsum-lsum-num[i]), вы получите новое значение rsum, из которого мы удалим lsum и num[i] ]. Когда вы будете проверять lsum == rsum, это может быть правдой один раз, но затем, когда значение rsum изменится, оно может не быть равным.

В коде, где вы получаете правильный ввод, rsum останется прежним, то есть sum(nums), и вы каждый раз будете удалять lsum и nums[i].

Я не знаю, достаточно ли я ясно выразился, а если нет, пожалуйста, скажите мне.

Большое спасибо за этот ответ и указание на мою глупую ошибку. Я понял, где ошибся.

Maverick 20.03.2022 07:41

Другие вопросы по теме