telebot: вывести из списка названия, чтоб они отправились в одно сообщение

Код:

def check_codes(message):
    projects = ['aa','bb','cc']
    for i in range(len(projects)):
        b = f"id: {i}, {projects[i]}"
    bot.send_message(message.chat.id, f'{b}\n*Текст*')

Мне нужно чтобы после нумерации все значения которые лежат в списке projects выводились в одно сообщение, и переводилось на новую строку. Код сверху только запоминает последнее значение в переменной b и его выводит. Как мне нужно нумеровать все названия, чтоб еще и вывести в одно сообщение?

модуль - telebot, версия python 3.12


Ответы (1 шт):

Автор решения: MarianD

Вместо

for i in range(len(projects)):
    b = f"id: {i}, {projects[i]}"
bot.send_message(message.chat.id, f'{b}\n*Текст*')

используйте

b = ""
for i, project in enumerate(projects):
    b += f"id: {i}, {project} "
bot.send_message(message.chat.id, f'{b}\n')

Объяснение:

  1. Вместо вывода только последнего значения мы в цикле добавляем всякое значение в начально пустую строку b, и таким образом созданную строку выводим на экран.

  2. Вместо некрасивого

    for i in range(len(projects)):
        b = f"id: {i}, {projects[i]}"
    

    т.е. избыточного применения индекса i для выражения projects[i], я применил итерацию прямо по элементах списка projects.

  3. Но потому что вы все равно хотите вывести и индекс, я применил к списку projects стандартную функцию enumerate(), которая из каждого элемента создает пару (индекс, элемент).

→ Ссылка