В Python, как применить round() к выводу типа списка?

#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».