Я пытаюсь изучить Python, и у меня есть проблема, поэтому, если у меня есть что-то подобное:
data_l = ['data', '18.8', '17.9', '0.0']
Как мне сделать это так?
data_l = ['data', 18.8, 18.9, 0.0]
4 ответа
Вы можете создать простую служебную функцию, которая либо преобразует данное значение в число с плавающей запятой, если это возможно, либо возвращает его как есть:
def maybe_float(s):
try:
return float(s)
except (ValueError, TypeError):
return s
orig_list = ['data', '18', '17', '0']
the_list = [maybe_float(v) for v in orig_list]
И, пожалуйста, не используйте имена встроенных функций и типов, таких как list
и т. Д. В качестве имен переменных.
Поскольку ваши данные на самом деле имеют структуру, а не являются действительно смешанным списком строк и чисел, кажется, что четыре кортежа из (str, float, float, float)
более подходящие:
data_conv = (data_l[0], *(float(v) for v in data_l[1:]))
Или в старых версиях Python
# You could also just convert each float separately since there are so few
data_conv = tuple([data_l[0]] + [float(v) for v in data_l[1:]])
Вышеупомянутые подходы работают, но так как смешанный список может также содержать целочисленное значение, я добавил дополнительную проверку.
def validate(num):
try:
return int(num)
except (ValueError, TypeError):
try:
return float(num)
except (ValueError, TypeError):
return num
vals_ = ['cat' ,'s-3-f','7390.19','12']
new_list = [validate(v) for v in vals_]
Выход:
['cat', 's-3-f', 7390.1, 12]
Универсальный подход:
def validate_number(s):
try:
return float(s)
except (ValueError, TypeError):
return s
data = [validate_number(s) for s in data]
В случае, если структура является фиксированной:
data = [s if i == 0 else float(s) for i, s in enumerate(data)]
Еще один:
data = [data[0]] + [float(s) for s in data[1:]]
isdigit
будет работать в случае натуральных чисел:
data = [int(s) if s.isdigit() else s for s in data]
Вы можете использовать метод str.isdigit
и понимание списка:
list = [int(s) if s.isdigit() else s for s in list]
Здесь у вас есть живой пример
Похожие вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.