Есть ли лучший способ обхода многомерного кортежа / списка?

#python #python-3.x #serialization #sympy

#python #python-3.x #сериализация #симпатия

Вопрос:

Я получил образцы данных, подобные этому:

    [1.212,3.54,[4.123],[5.5343],[[2,3.2],[9.345,4.102]]]
   ((1.41231,3.312),4.212,6.312)
   ["hello",1.232,"3.555"]
 

моя конечная цель — сериализовать эти данные, но некоторые данные в этих списках не относятся к типам python, например, python float—sympy.Core.Float , поэтому я должен прочитать эти многомерные массивы, узнать те числа, которые являются Sympy.core .Тип с плавающей запятой, затем выполняется преобразование типа следующим образом: «float (число)», так легко ли это закончить?

Вот часть кодов:

 def RecursData(datas,final_list):
    for index ,value in enumerate(datas):
        if(isinstance(value,(tuple,list))):
            tmp_data_list  = list(value)
            RecursData(tmp_data_list,final_list)
        elif isinstance(value,(float,Float)):
            final_list.append(float(value))
        else:
            final_list.append(value)
 

Ответ №1:

В вашем случае я бы сделал это:

 
your_data = [1.212,3.54,[4.123],[5.5343],[[2,3.2],[9.345,4.102]]]

def itter(lst):
    end_goal = []
    for x in lst:
        if hasattr(x, '__iter__'):
            end_goal.append(itter(x))
        else:
          # here do whatever you need to do
          # so if you have to reconvert data

          if isinstance(x,Float):
              x = float(x)

          end_goal.append(x)


    return end_goal


# then just run the function/
print(itter(your_data))
 

это заменит все значения с плавающей запятой на значения с плавающей запятой python

Комментарии:

1. data = [(1, Float(1.222222), 3), [1, 2, 3], (3, 4, 5), 5] вывод: x= 1 end_gol= [1] x= 1.22222200000000 end_gol= [1, 1.22222200000000] x= 3 end_gol= [1, 1.22222200000000, 3] x= 1 end_gol= [1] x= 2 end_gol= [1, 2] x= 3 end_gol= [1, 2, 3] x= 3 end_gol= [3] x= 4 end_gol= [3, 4] x= 5 end_gol= [3, 4, 5] x= 5 end_gol= [5] [5] Process finished with exit code 0 , так как я мог его реорганизовать

2. я не понимаю, что вы пытаетесь сделать, поэтому я использовал свою интуицию…. Я думаю, это то, что вы хотите… если я ошибаюсь, пожалуйста, объяснитесь