Я хочу преобразовать список строк (значения температуры: ['23 .14C ', '19 .91C'] ['54 .04F ', '32 .64F']) в числа с плавающей точкой в ​​Python - PullRequest
0 голосов
/ 21 мая 2019

У меня есть два списка температур с градусами Фаренгейта и Цельсия, например :(['23,6C', '16,5C', '38,4C',...] и ['19.6F', '72.3F', '81.75F', '18.02F',) ​​тип данных - строка, и я хочу преобразовать их в числа с плавающей точкой, чтобы иметь возможность вычислять их в Кельвинах. Буквы могут быть удалены.

Я уже пытался удалить буквы с помощью цикла for, но затем я стал списком строк каждого значения до и после точки или запятой. Когда я хочу преобразовать их напрямую, это не работает из-за букв после значений.

for pos in list_cel:
    for buchst in pos:
        if buchst == "C":
            buchst.replace("C", " ")
        else:
            nlist_cel.append(buchst)
print(nlist_cel)

# дает мне список строк, разделенных после каждой запятой

как ['23','6',...] вместо [23,6 or 23.6]

Вывод должен выглядеть следующим образом

[23.6, 16.5, 38.4,] 
[19.6, 72.3, 81.75,]

Ответы [ 7 ]

1 голос
/ 21 мая 2019

Используя списочное понимание, подробнее

str.replace (старый, новый) - Возвращает копию строки со всеми вхождениями подстроки old, замененной нановый

fahrenheit =['19.6F', '72.3F', '81.75F', '18.02F']

celsius = ['23,6C', '16,5C', '38,4C']

fahrenheit = [float(i.replace("F","")) for i in fahrenheit ]
celsius = [float(i.replace("C","").replace(",",".")) for i in celsius ]

print(fahrenheit)
print(celsius)

O / P:

[19.6, 72.3, 81.75, 18.02]
[23.6, 16.5, 38.4]
0 голосов
/ 21 мая 2019

Быстрое решение, если вы знаете, что ко всем темпам добавлены символы 'F' или 'C':

fah = ['19.6F', '72.3F', '81.75F', '18.02F']
cel = ['23,6C', '16,5C', '38,4C']

Если просто проверить первый элемент в списке, чтобы увидеть, есть ли 'F'или' C 'и продолжает соответственно возвращать список.Также избавляется от запятых, было бы намного проще не иметь с ними дело позже.

def f_or_c_temp(temp_list):
    if 'F' in temp_list[0]:
        return [temp.replace('F','') for temp in f]
    if 'C' in temp_list[0]:
        c = [temp.replace('C','') for temp in temp_list]
        return [temp.replace(',','.') for temp in c]

Так что по Фаренгейту

f_or_c_temps(fah)

Вывод:

['19.6', '72.3', '81.75', '18.02']

А для Цельсия

f_or_c_temps(cel)

Вывод:

['23.6', '16.5', '38.4']
0 голосов
/ 21 мая 2019
list_cel = ['23,6C', '16,5C', '38,4C']
list_far = ['19.6F', '72.3F', '81.75F', '18.02F']


list_cel_float = map(lambda x:float(x.replace(',','.').replace('C','')), list_cel)
list_far_float = map(lambda x:float(x.replace(',','.').replace('F','')), list_far)

print list_cel_float
print list_far_float
0 голосов
/ 21 мая 2019

Попробуйте это -

for value in raw_list_value:
    if ',' in value:
        new_val = float('.'.join(i[:-1].split(','))
    else:
        new_val = float(value[:-1])
    temp_list.append(new_value)
0 голосов
/ 21 мая 2019

Использование понимания списка с str.replace и str.strip

Пример:

data = (['23,6C', '16,5C', '38,4C'], ['19.6F', '72.3F', '81.75F', '18.02F'])
print([[float(j.replace(",", ".").rstrip("CF")) for j in i] for i in data])

Выход:

[[23.6, 16.5, 38.4], [19.6, 72.3, 81.75, 18.02]]
0 голосов
/ 21 мая 2019

Замена запятой на точку и нарезку единицы

lst=['23,6C', '16,5C', '38,4C',]
lst=[float(i[:-1].replace(',','.')) for i in lst]

Вывод

[23,6, 16,5, 38,4]

0 голосов
/ 21 мая 2019

конвертировать его на плаву

for pos in list_cel:
for buchst in pos:
    if "C" in buchst:
       val = buchst.replace("C", " ")
       if ',' in val:
          nlist_cel.append( float (val.replace(",", ".")))
       else:
          nlist_cel.append(float(val))

 print(nlist_cel)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...