Печать порядкового номера списка

Я пытаюсь заставить свою функцию печатать номер индекса вместо фактического значения в списке:

def checkValue(list,n):
    for i in list:
        if i == n:
            print('The value is in position %s of the list.' % i)
        else:
            print('The value is not in position %i of the list.' %i)

print(checkValue([4,6,5,4,44],44))

Что печатает:

The value is not in position 4 of the list.
The value is not in position 6 of the list.
The value is not in position 5 of the list.
The value is not in position 4 of the list.
The value is in position 44 of the list.
None

Я надеялся, что он скажет что-то вроде:

The value is not in position 0 of the list.
The value is not in position 1 of the list.
The value is not in position 2 of the list.
The value is not in position 4 of the list.
The value is in position 5 of the list.

Я пробовал % list(i) и i() и тому подобное, но это не сработало.

Вам нужен enumerate() для перебора списка и получения индексного номера.

Bijan 10.08.2024 18:45

какой язык? можешь отметить это?

Daniel A. White 10.08.2024 19:01
Почему в 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 может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
6
2
52
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Результат не соответствует вашим ожиданиям. Начнем с вывода None в конце. Вы не хотите этого. Причина существует в этом операторе печати:

print(checkValue([4,6,5,4,44],44))

Поскольку checkValue ничего не возвращает, то и печатать тоже нечего. Итак, давайте удалим этот отпечаток и упростим просто

checkValue([4,6,5,4,44],44)

Вся печать будет выполняться внутри этого метода.

Первая идея и, вероятно, хорошая, если вы начинаете: если у вас нет индекса, создайте его самостоятельно, начните с 0 и увеличьте его:

def checkValue(list, n):
    index = 0
    for i in list:
        if i == n:
            print('The value is in position %s of the list.' % index)
        else:
            print('The value is not in position %i of the list.' % index)
        index += 1

Однако это еще не все:

  1. Не используйте название list для чего-либо, созданного вами. list — это разновидность Python. Если вы используете его самостоятельно, вы можете затенить список Python. Вы этого не хотите. Найдите другое имя. Обычно я использую то, что находится внутри списка, и добавляю к нему букву S во множественном числе. Если в вашем списке есть номер, то его имя будет numbers.
  2. i — неподходящее имя для того, что вы вычеркиваете из списка. Если в списке есть числа (множественное число), то на каждом ходу вы получаете число (единственное число).
  3. n — неподходящее название для того, что вы ищете. Используйте needle, search, find или number_to_find.
  4. Название checkValue плохо описывает, что делает метод. Я придумал findNumberAndPrintIndex

Тогда код будет выглядеть так

def findNumberAndPrintIndex(numbers, number_to_find):
    index = 0
    for number in numbers:
        if number == number_to_find:
            
            print('The value is in position %s of the list.' % index)
        else:
            print('The value is not in position %i of the list.' % index)
        index += 1


findNumberAndPrintIndex([4, 6, 5, 4, 44], 44)

Это намного лучше, но не очень питонично. Ваша проблема настолько распространена, что уже решена. Мы бы использовали метод enumerate(), который выполняет индексацию за вас и возвращает индекс и число при каждом запуске цикла.

Мы, вероятно, также предпочли бы f-строки старому форматированию строк в стиле C. В каждой хорошей IDE есть подсветка синтаксиса f-строк.

def findNumberAndPrintIndex(numbers, number_to_find):
    for index, number in enumerate(numbers):
        if number == number_to_find:
            print(f'The value is in position {index} of the list.')
        else:
            print(f'The value is not in position {index} of the list.')


findNumberAndPrintIndex([4, 6, 5, 4, 44], 44)

А если вы хотите найти индекс определенного числа в списке, вы должны использовать метод .index() списка:

def findNumberAndPrintIndex(numbers, number_to_find):
    print(f"The value is in position {numbers.index(number_to_find)} of the list.")


findNumberAndPrintIndex([4, 6, 5, 4, 44], 44)

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

Похожие вопросы

При использовании matplotlib для отображения графики графика не отвечает, и появляется сообщение об ошибке: ModuleNotFoundError: нет модуля с именем «imp»
Использование XLSXWRITER в Python: как вставить 27-значное число в ячейку и отобразить его как текст, а не как научное число
Получение истинного или ложного результата из базы данных, если имя пользователя уже существует
Что означают [ и ] при печати массива numpy?
Повтор уже угаданной буквы при отображении уже угаданной буквы в Python
Как я могу сократить эту нейронную сеть, которую я создал на Python, с помощью TensorFlow?
Последовательное чтение не дает ожидаемого результата
Как сделать group_by, а затем вычесть среднее значение группы из каждой записи в группе в Polars
FastAPI выдает сообщение «RecursionError: превышена максимальная глубина рекурсии при вызове объекта Python»
Добавляйте строки в таблицу Excel с помощью Python, не забивая формулы