Posts: 9
Threads: 5
Joined: Oct 2019
Jan-17-2020, 07:54 AM
(This post was last modified: Jan-17-2020, 07:54 AM by vintysaw.)
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)
Posts: 1,950
Threads: 8
Joined: Jun 2018
As far as I understand there is conversion to int, not verification.
I'm not 'in'-sane. Indeed, I am so far 'out' of sane that you appear a tiny blip on the distant coast of sanity. Bucky Katt, Get Fuzzy
Da Bishop: There's a dead bishop on the landing. I don't know who keeps bringing them in here. ....but society is to blame.
Posts: 50
Threads: 2
Joined: Nov 2019
Jan-17-2020, 09:11 AM
(This post was last modified: Jan-17-2020, 09:11 AM by sandeep_ganga.)
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
Posts: 9
Threads: 5
Joined: Oct 2019
Thanks Sandeep. This works for me. I guess, I was missing to use try-except. The ifelse logic wasn't working for me.
Posts: 1,950
Threads: 8
Joined: Jun 2018
Jan-17-2020, 01:56 PM
(This post was last modified: Jan-17-2020, 01:56 PM by perfringo.)
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]
I'm not 'in'-sane. Indeed, I am so far 'out' of sane that you appear a tiny blip on the distant coast of sanity. Bucky Katt, Get Fuzzy
Da Bishop: There's a dead bishop on the landing. I don't know who keeps bringing them in here. ....but society is to blame.
|