У меня проблема с циклом for Python

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

КОД:

class Solution:
    def searchInsert(nums, target):
        pos = 0
        for i in nums:
            if nums[pos] != target:
                pos = pos + 1
                
            print(pos)
            break

Solution.searchInsert([1,3,5,6], 5)

Эта программа получает массив целых чисел и другое целое число, которое я называю target, сценарий должен вернуть мне позицию в массиве, в которой у нас есть номер цели.

В этом случае мой массив «nums» содержит [1,3,5,6], а моя цель равна 5, поэтому результат должен быть 2, потому что число цели (5) находится в позиции «2» массива .

Проблема возникает, когда я запускаю скрипт. Вместо 2 скрипт дает мне 1

Если кто-то поймает ошибку в коде, пожалуйста, сообщите мне.

Почему бы просто не использовать nums.index(target)?

MattDMo 07.12.2022 19:48

Вы создаете экземпляр итератора вне цикла и увеличиваете его вне управляющей структуры. Это любопытно. Попробуйте отследить свои значения с помощью этого оператора после объявления цикла for: print("i is %i, pos is %i, target is %i" %(i,pos, target))

MisterJT 07.12.2022 19:51

Кажется, вы прерываете цикл после первой итерации (но отступ в вашем сообщении странный). Вот почему вы получаете 1, первое обновление pos.

Ignatius Reilly 07.12.2022 19:53

Ваша функция всегда будет неявно возвращать None, потому что вы явно прерываете цикл for во время его первой итерации. Вы также можете перечитать инструкции Leetcode для этой функции.

Pingu 07.12.2022 20:28
Почему в 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 может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
4
70
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

вы можете использовать перечисление, которое дает вам индекс и значение

class Solution:
    def searchInsert(nums, target):
        for index, value in enumerate(nums):
            if value == target:
                return index 
             
print(Solution.searchInsert([1,3,5,6], 5))
Ответ принят как подходящий

Вы закрываете цикл после первой итерации: вам нужно добавить блок else:, чтобы он мог продолжать работать, пока не будет выполнено условие...

class Solution:
    def searchInsert(nums, target):
        pos = 0
        for i in nums:
            if nums[pos] != target:
                pos = pos + 1
            else:    
                print(pos)
                break
>>> Solution.searchInsert([1,3,5,6],5)
2

имеет смысл, я не знаю, как я этого не понял. Спасибо за вашу помощь

Pablo 07.12.2022 20:19

Я публикую здесь только фиксированный код, но, как указывали другие, это странный способ справиться с этим. Но я понимаю, если вы изучаете Python и приходите с другого языка (Visual Basic?), можно пойти по этому пути. В python отступ имеет решающее значение. В вашем коде вам нужно увеличивать pos каждый раз, когда код проходит цикл, а не только тогда, когда вы нашли/не нашли нужное значение.

class Solution:
    def searchInsert(nums, target):
        pos = 0
        for i in nums:
            if nums[pos] == target:
                print(pos) #replace with return pos ?
                break
            pos = pos + 1 #increase outside above condition

Solution.searchInsert([1,3,5,6], 5)

Чтобы упростить этот код, один вкладыш исследует комментарии других пользователей. Или исследуйте индекс массива, длину и более поздний модуль pandas.

Не забывайте голосовать за ответы или помечать их как отвеченные.

bracko 07.12.2022 20:36

я не могу проголосовать, потому что мне нужно 15 репутации :(

Pablo 07.12.2022 20:38

я не могу отметить более одного ответа как принятого, поэтому я прокомментировал вам, что ваш ответ также действителен и работает хорошо

Pablo 07.12.2022 20:44

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