Python-Как мне проверить наличие второго вхождения?

#python-3.x #loops

#python-3.x #петли

Вопрос:

Учитывая список значений Python xs и значение v, выполните поиск по xs для v. Если вы найдете второе вхождение v, верните этот неотрицательный индекс. Если v не найден по крайней мере два раза, верните значение None. О 2-м совпадении сообщается при наличии нескольких совпадений значения

 def find_second_occurrence(xs,v):
    count = 0
    for i in range(len(xs)):
        if v in i:
            count  = 1
            if v in i:
                count  = 1
                if count == 2:
                    return v
        elif v != [xs]:
            count == 'None'
    return count
  

Сообщение об ошибке:

 Traceback (most recent call last):
  File "tester3p.py", line 120, in test_find_second_occurrence_07
    def test_find_second_occurrence_07 (self): self.assertEqual (find_second_occurrence(['h','a','p','p','y'], 'a'), None)
  line 4, in find_second_occurrence
    if v in i:
TypeError: argument of type 'int' is not iterable
  

Комментарии:

1. в чем ваш вопрос?

2. @JohnCarter корректен ли алгоритм, если был задан список положительных целых чисел? Я также не уверен, что означает ошибка и как ее исправить

3. if v in i i это индекс . Ваш код, по сути, спрашивает, находится ли (скажем xs = [10,12,13] , и v равно 12, тогда мы начинаем с i = 0 первого индекса), если 12 находится в 0 . Имеет ли это какой-либо смысл для вас? Вы можете использовать только in для списков или объектов, похожих на списки. Я полагаю, вы имеете в виду if v in xs .

Ответ №1:

Ошибка здесь:

 for i in range(len(xs)):
    if v in i:
  

if v in i спрашивает: «найдено ли значение v в последовательности i?» Но i является целым числом из последовательности range(len(xs)) , а целое число не является последовательностью, поэтому in i не имеет смысла.

Комментарии:

1. Теперь это имеет больше смысла, спасибо. Но у меня есть и другая проблема. Когда я помещаю его в тестовый файл, он никогда не попадает в инструкцию elif. Когда предполагалось, что результат будет «Нет», вместо него просто выводилось «0».

2. Конечно , он никогда не попадает в elif , потому что он падает в if . Верно? Или вы устранили эту проблему, и теперь мы перешли к другой другой проблеме? Если это последнее, пожалуйста, попробуйте отладить его самостоятельно, а затем при необходимости отправьте здесь отдельный вопрос.