Python Forum

Full Version: List items verification for Integer type
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Hi All,

I want to verify if the list objects are integers are not. My code is failing at 0 index, when there is a float value or when there is a string value.

Please help.


num=0
z=['11, 12, 14', '20', '21, 23', '24', 'man', '1', '27', '28', '29.1', '30']
mydefectlist=[]
mydefectlist1=[]
mydefectlist2=[]

while num < len(z):
    z[num] = int(z[num])
    num +=1

for s in z:
    if (isinstance(s, int)):
        flag=0
        mydefectlist.append(s)
        print('int values:',mydefectlist)
    elif(isinstance(s, float)):
        mydefectlist1.append(s)
        print('float values:',mydefectlist1)
    elif(isinstance(s, str)):
        mydefectlist2.append(s)
        print('string values:',mydefectlist2)
    else:
        print('please check the list again', s)
As far as I understand there is conversion to int, not verification.
Try this to see if that helps,

list1=['man12','11', '12', '14', '20', '21', '23', '24', 'man', '1', '27', '28', '29.1', '30']
mydefectlist=[]
mydefectlist1=[]
mydefectlist2=[]
 
for item in list1:
	try:
		if (isinstance(int(item), int)):
			mydefectlist.append(item)
	except ValueError:
		try:
			if (isinstance(float(item), float)):
				mydefectlist1.append(item)
		except ValueError:
			mydefectlist2.append(item)
		
print("int-->", mydefectlist)
print("float-->", mydefectlist1)
print("str-->", mydefectlist2)
Output:
python test1.py int--> ['11', '12', '14', '20', '21', '23', '24', '1', '27', '28', '30'] float--> ['29.1'] str--> ['man12', 'man']
Best Regards,
Sandeep

GANGA SANDEEP KUMAR
Thanks Sandeep. This works for me. I guess, I was missing to use try-except. The ifelse logic wasn't working for me.
One way (which does not require to define possible classes in chain of if-s) is to use defaultdict and class name:

>>> import collections
>>> lst = ['abc', 1, 2, 3, 4.3, [42]] 
>>> types = collections.defaultdict(list)
>>> for item in lst: 
...     types[type(item).__name__].append(item)
...
>>> types
defaultdict(list, {'str': ['abc'], 'int': [1, 2, 3], 'float': [4.3], 'list': [[42]]})
>>> for k, v in types.items(): 
...     print(f'{k} --> {v}') 
...                                                                 
str --> ['abc']
int --> [1, 2, 3]
float --> [4.3]
list --> [[42]]
>>> types['int']                                                    
[1, 2, 3]