У меня проблема при использовании цикла 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
Если кто-то поймает ошибку в коде, пожалуйста, сообщите мне.
Вы создаете экземпляр итератора вне цикла и увеличиваете его вне управляющей структуры. Это любопытно. Попробуйте отследить свои значения с помощью этого оператора после объявления цикла for: print("i is %i, pos is %i, target is %i" %(i,pos, target))
Кажется, вы прерываете цикл после первой итерации (но отступ в вашем сообщении странный). Вот почему вы получаете 1, первое обновление pos.
Ваша функция всегда будет неявно возвращать None, потому что вы явно прерываете цикл for во время его первой итерации. Вы также можете перечитать инструкции Leetcode для этой функции.






вы можете использовать перечисление, которое дает вам индекс и значение
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
имеет смысл, я не знаю, как я этого не понял. Спасибо за вашу помощь
Я публикую здесь только фиксированный код, но, как указывали другие, это странный способ справиться с этим. Но я понимаю, если вы изучаете 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.
Не забывайте голосовать за ответы или помечать их как отвеченные.
я не могу проголосовать, потому что мне нужно 15 репутации :(
я не могу отметить более одного ответа как принятого, поэтому я прокомментировал вам, что ваш ответ также действителен и работает хорошо
Почему бы просто не использовать
nums.index(target)?