Type of elements in a list - Python

0

I have two lists of different sizes. The first is a list of lists. Where I need to compare the type of elements in that first list list with another list that contains data type (str, int, float, ..).

Example:

lista1 = [['a', 'bb', 1.5, 3, 'a'],['h', 'oo', 9.6, 2, 'n'],...,['u', 'pp', 2.9, 1, 'j']]

lista2 = ['str', 'str', 'float', 'int', 'str']

I'm doing this:

for linha in range(0,68):
    for linha2 in range(0,11):
        if(type(lista1[linha2][linha]) != lista2[linha]):
            print("Alguma coisa")

But it is not working because it returns:

  

int, <class 'int'>

So it does not recognize as equal but rather as different. How can I do it?

    
asked by anonymous 08.05.2017 / 19:42

2 answers

1

Since list2 is filled with the data type names of your database we can not do the direct conversion, we will have to create a dictionary that will do the "-> for" of the database types for the Python types.

Here's how it would look:

lista1 = [['a', 'bb', 1.5, 3, 'a'],['h', 'oo', 9.6, 2, 'n'],...,['u', 'pp', 2.9, 1, 'j']]

# Adequando a lista2 para a situação
# lista2 = ['str', 'str', 'float', 'int', 'str']
lista2 = ['char', 'varchar', 'float', 'int', 'char']

# Dicionário de "de->para" do label que vem do banco para o tipo em Python 
tipo = {'int': int, 'nvarchar': str, 'varchar': str, 'char': str, 'decimal': float, 'decimal': float, 'float': float}

for linha in range(68): # quando o range começa com 0 não é preciso declará-lo
    for linha2 in range(11):

        # Estou criando as variáveis aqui para deixar o IF mais limpo
        typeLista1 = type(lista1[linha2][linha])
        typeLista2 = tipo[lista2[linha]] 

        if typeLista1 is not typeLista2:
            print("Alguma coisa")

I just changed your own example to demonstrate my idea, if you want to better detail your need I can change my code to make it closer to your real need.

Hug.

    
09.05.2017 / 15:52
2

Look, my friend, I've done this here in a hurry:

lista1 = [['a', 'bb', 1.5, 3, 'a'],['h', 'oo', 9.6, 2, 'n'],['u', 'pp', 2.9, 1, 'j']]

lista2 = ['str', 'float', 'int']

for linha in lista1:
    for linha2 in range(len(linha)):
        tipo = str(type(linha[linha2])).replace("<class '",'') # Retiro [ <class ' ]
        tipo = tipo.replace("'>",'') #retiro [ '> ], ficando só o tipo [ str, float ou int ]
        if tipo in lista2: # Se tiveer outro tipo além de str, float ou int, ele não será exibido.
            print(str(linha[linha2]).ljust(3),'=', tipo)

output:

a   = str
bb  = str
1.5 = float
3   = int
a   = str
h   = str
oo  = str
9.6 = float
2   = int
n   = str
u   = str
pp  = str
2.9 = float
1   = int
j   = str
    
08.05.2017 / 22:25