@5p1ke

Как создать массив из другого массива?

Хочу сделать массовую отправку картинок через telegram bot
использую python либу "telebot"
Я получаю массив
arrayID=[id1, id2, id3, idN]
Для того что бы отправить картинки мне надо выполнить такой запрос
bot.send_media_group(message.from_user.id, [InputMediaPhoto(ID1), [InputMediaPhoto(ID2)])

Как мне реализовать передачу всех ID из массива "arrayID" если я не знаю сколько там элементов.
Так как я только изучаю Python, я написал такой костыль
ext_array = []
for id in arrayID:
    add_to_array = 'InputMediaPhoto(' + str(id) + ')'
    array.append(ext_array)
bot.send_media_group(message.from_user.id, ext_array)

Мое исполнение не работает :(
Есть ли нормальное решение?
Благодарю
  • Вопрос задан
  • 724 просмотра
Решения вопроса 1
solotony
@solotony
покоряю пик Балмера
ты передаешь какую-то строку
'InputMediaPhoto(' + str(id) + ')'

а надо объект

InputMediaPhoto(id)

bot.send_media_group(message.from_user.id,  [InputMediaPhoto(x) for x in arrayID])


может потребуется добавить преобразование типа явно

InputMediaPhoto(str(id))
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@i1yas
Конечно, ваше решение не будет работать, add_to_array = 'InputMediaPhoto(' + str(id) + ')' - вы просто записываете строку здесь, а должен быть вызов функции. При этом add_to_array не используется, append выполняется на каком-то array к тому же.

Нужно использовать встроенную функцию map:
bot.send_media_group(message.from_user.id, list(map(InputMediaPhoto, arrayID)))
Ответ написан
Комментировать
@wildkain
Ruby
твое решение не работает, потому что 'InputMediaPhoto(' + str(id) + ')' вернет тебе строку, которая не будет исполняться интерпретатором.
для прохода по элементам массива используй итераторы(если тебе нужно последовательное исполнение) или .map если в итоге тебе нужно получить коллекцию результатов.

arrayID=[id1, id2, id3, idN]

bot.send_media_group(message.from_user.id, [ InputMediaPhoto(id) for id in arrayID ])
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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