#python #python-3.x
#python #python-3.x
Вопрос:
Если у меня есть
a = "3.14, ABCF , 2.16"
и тип (a) возвращает «str»
как я могу преобразовать это в список или кортеж и сохранить целостность типов элементов внутри. (например: запуск через коллекцию и тип проверки должен возвращать float, string, float соответственно)
Комментарии:
1. Какой тип целостности? Все, что у вас есть, это
string
здесь нет других типов2. Ах, спасибо, это то, о чем у меня возник вопрос. Смогу ли я сделать что-то вроде «{0}, {1}, {2}». вместо этого формат (3.14,»ABCF», 2.16) ? или есть какой-либо другой способ, которым я мог бы это сделать?
3. Это создает
string
с заданными значениями. Я не уверен, чего вы пытаетесь здесь достичь. Строка — это строка, у нее нет других типов4. Спасибо, я думаю, вы ответили на мой вопрос. Похоже, у меня ошибка в понимании!
Ответ №1:
Я сделал это, используя регулярное выражение
import re
a = "3.14, ABCF , 2.16 , 9"
b=a.split(",") #break string
for c in b:
x=c.strip() # removes whitespace character
if x.isdigit(): #return bool value
print("int")
elif bool(re.search('[a-zA-Z] ', x)):
print("string")
elif bool(re.search('[0-9.] ', x)):
print("float")
ВЫВОД :
float
string
float
int
или
С помощью библиотеки python ast
from ast import literal_eval
def get_type(data):
try:
return type(literal_eval(data))
except (ValueError, SyntaxError):
# A string, so return str
return str
a = "3.14, ABCF , 2.16 , 9, True"
b=a.split(",")
for c in b:
x=c.strip()
print(get_type(x))
ВЫВОД:
<class 'float'>
<class 'str'>
<class 'float'>
<class 'int'>
<class 'bool'>
Комментарии:
1. Почему вы приводите
x.isdigit()
кbool
? Это уже возвращается. Кроме того, регулярные выражения на самом деле не гарантируют какой-либо безопасности типов, вы просто предполагаете, что строки, соответствующие этой схеме, имеют этот тип2. Спасибо @UnholySheep, я обновил предыдущий код и добавил другой тип примера, чтобы сделать то же самое.