Reputation: 19
I get a list out looking like this: (hours)
list = ['02:00', '01:00', '03:00', '00:00', '04:00', '05:00', '06:00', '23:00', '24:00', '07:00', '22:00', '14:00', '13:00', '15:00', '21:00', '08:00', '16:00', '12:00', '20:00', '17:00', '11:00', '18:00', '09:00', '10:00']
in the end of my function it looks like this when I sort out the list:
list = nsmallest(HoursPerDay, my_dict, key=my_dict.get)
return [i.strip(':0') for i in list]
And it gives me this: list = ['2', '1', '3', '', '4', '5', '6', '23', '24', '7', '22', '14', '13', '15', '21', '8', '16', '12', '2', '17', '11', '18', '9', '1']
Works fine on every hour except for 20:00 that it makes into 2 instead of 20 and make 00:00 into nothing. How do I solve this? I have tried some regex generators too but I can´t get it right.
Upvotes: 1
Views: 64
Reputation: 534
If we use the following snippet, your desired result can be achieved.
[(i.removesuffix(':00')).lstrip('0') or '0' for i in list]
lstrip
]Another alternate solution using the regex:
[str(int(re.sub("\:00$", "", i))) for i in list]
re.sub("\:00$", "", i
]Upvotes: 0
Reputation: 3233
strip
default behaviour as given in python documentation is
Return a copy of the string with the leading and trailing characters removed. The chars argument is a string specifying the set of characters to be removed. If omitted or None, the chars argument defaults to removing whitespace. The chars argument is not a prefix or suffix; rather, all combinations of its values are stripped.
'00010:010:000'.strip(':0') # it will remove all available combination of ':0'
# you will get '10:01'
Now for your specific requirement
[i.rstrip('0').rstrip(':') for i in list]
If you want to retain zeroes from right side after first 0 removed then use
import re
list = ['02:00', '01:00', '03:00', '00:00', '04:00', '05:00', '06:00', '23:00', '24:00', '07:00', '22:00', '14:00', '13:00', '15:00', '21:00', '08:00', '16:00', '12:00', '20:00', '17:00', '11:00', '18:00', '09:00', '10:00']
[re.sub(r'0+(.+)', r'\1', i.rstrip('0').rstrip(':')) for i in list]
# ['2', '1', '3', '0', '4', '5', '6', '23', '24', '7', '22', '14', '13', '15', '21', '8', '16', '12', '20', '17', '11', '18', '9', '10']
Upvotes: 0
Reputation: 26915
Rather than stripping you should be splitting. Something like this:
inlist = ['02:00', '01:00', '03:00', '00:00', '04:00', '05:00', '06:00', '23:00', '24:00', '07:00', '22:00', '14:00', '13:00', '15:00', '21:00', '08:00', '16:00', '12:00', '20:00', '17:00', '11:00', '18:00', '09:00', '10:00']
outlist = [f"{int(e.split(':')[0])}" for e in inlist]
print(outlist)
Output:
['2', '1', '3', '0', '4', '5', '6', '23', '24', '7', '22', '14', '13', '15', '21', '8', '16', '12', '20', '17', '11', '18', '9', '10']
Note:
The conversion to int and back to string effectively removes any leading zero
Upvotes: 1