преобразование списка строк python в их тип

учитывая список строк python, как я могу автоматически преобразовать их в их правильный тип? Значение, если у меня есть:

["hello", "3", "3.64", "-1"] 

Я бы хотел, чтобы это было преобразовано в список

 ["hello", 3, 3.64, -1] 

где первый элемент является стимулятором, второй – int, третий – float, а четвертый – int.

как я могу это сделать? Благодарю.

  • Фиксация кривой в Scipy с 3D-данными и параметрами
  • Как правильно сгладить кривую?
  • Как узнать технологию интеграции, используемую quadpack
  • Установка SciPy с помощью pip
  • Средняя трендовая кривая для точек данных в Python
  • Использование scipy.io.savemat для сохранения вложенных списков
  • Последовательные, перекрывающиеся подмножества массива (NumPy, Python)
  • Python / Numba: Неизвестная ошибка атрибута с помощью scipy.special.gammainc ()
  • 7 Solutions collect form web for “преобразование списка строк python в их тип”

     import ast L = ["hello", "3", "3.64", "-1"] def tryeval(val): try: val = ast.literal_eval(val) except ValueError: pass return val print [tryeval(x) for x in L] 

    Без использования оценки:

     def convert(val): constructors = [int, float, str] for c in constructors: try: return c(val) except ValueError: pass 
     def tryEval(s): try: return eval(s, {}, {}) except: return s map(tryEval, ["hello", "3", "3.64", "-1"]) 

    Только делайте это, если вы доверяете вводам. Кроме того, имейте в виду, что он поддерживает больше, чем просто литералы; арифметические выражения будут также оценены.

    Я выполнил то же самое с json.loads метода json.loads

     def f(l): for i in l: try: yield json.loads(i) except: yield i 

    Контрольная работа:

     In [40]: l Out[40]: ['hello', '3', '3.64', '-1'] In [41]: list(f(l)) Out[41]: ['hello', 3, 3.64, -1] 

    Если вы действительно заинтересованы только в строках, плаваниях и ints, я предпочитаю более подробные, менее обоснованные

     def interpret_constant(c): try: if str(int(c)) == c: return int(c) except ValueError: pass try: if str(float(c)) == c: return float(c) except ValueError: return c test_list = ["hello", "3", "3.64", "-1"] typed_list = [interpret_constant(x) for x in test_list] print typed_list print [type(x) for x in typed_list] 

    На самом деле это не ответ, но я хотел бы указать, насколько это важно, когда у вас есть база данных параметров с ID схемы, PAR , VAL . Например:

     ID PAR VAL 001 velocity '123.45' 001 name 'my_name' 001 date '18-dec-1978' 

    Эта схема подходит, если вы не знаете, сколько параметров необходимо хранить для определенного ID . Недостатком является то, что значения в VAL представляют собой все строки, и их необходимо преобразовать в правильный тип данных по запросу. Вы можете сделать это, добавив четвертый столбец в схему, называемый TYPE , или вы можете использовать любой из предложенных до сих пор подходов.

    Хороший вопрос!

    PS. Схема базы данных связана с одним из моих предыдущих вопросов .

    Вариант красивого решения ryans для пользователей numpy:

     def tonum( x ): """ -> int(x) / float(x) / None / x as is """ if np.isscalar(x): # np.int8 np.float32 ... # if isinstance( x, (int, long, float) ): return x try: return int( x, 0 ) # 0: "0xhex" too except ValueError: try: return float( x ) # strings nan, inf and -inf too except ValueError: if x == "None": return None return x def numsplit( line, sep=None ): """ line -> [nums or strings ...] """ return map( tonum, line.split( sep )) # sep None: whitespace 
    Python - лучший язык программирования в мире.