#list #python-3.8
#Список #python-3.8
Вопрос:
Я пытаюсь написать программу, которая преобразует температуру из градуса Цельсия в градус Фаренгейта.
temps = [("Los Angeles", 26)]
def c_to_f(data):
return (data[0], (9 / 5) * data[1] 32)
print(list(map(c_to_f, temps)))
Результат является: [('Los Angeles', 78.80000000000001)]
Мне не нужно все это число, мне достаточно быть похожим [('Los Angeles', 78.8)]
Я пытался использовать функцию round () как:
print(list(round(map(c_to_f, temps), 2)))
Я получил "TypeError: type list doesn't define __round__ method"
Итак, есть ли способ получить желаемый результат? С помощью round () или чего-то другого?
Комментарии:
1.
[(place, round(temp * 9 / 5 32, 2)) for place, temp in temps]
. В общем, я бы рекомендовал написать функцию, которая не обрабатывает ничего, кроме преобразования температуры, потому что это делает все намного проще. Таким образом, вы получите[(place, round(c_to_f(temp), 2)) for place, temp in temps]
2. Да, я согласен с вами. Большое спасибо.
Ответ №1:
Используйте функцию round()
in c_to_f
def c_to_f(data):
return (data[0], round((9 / 5) * data[1] 32, 2))
print(list(map(c_to_f, temps)))
Вывод:
[('Los Angeles', 78.8)]
Комментарии:
1. Вот и все. Большое вам спасибо.
Ответ №2:
Вы можете использовать понимание списка для перебора и округления.
print([(place, round(temp, 2)) for place, temp in map(c_to_f, temps)])
Этот код проходит по карте, один за другим, и добавляет кортеж в список, содержащий имя и округленную температуру.
Вывод:
[('Los Angeles', 78.8)]
Комментарии:
1. Да, это сработало отлично. Но я думаю, что это менее читабельно по сравнению с ответом @deadshot.
2. Я согласен; понимание списка сложно для чтения и сбивает с толку. Я все еще, однако, считаю нужным рекомендовать их как неотъемлемую часть архитектуры Python. Цитирую другой ответ Stack Overflow: «И это python».