Fastest way to insert these dashes in python string?
You are better off using string formatting than string concatenation
c['date'] = '{}-{}-{}'.format(c['date'][0:4], c['date'][4:6], c['date'][6:])
String concatenation is generally slower because as you said above strings are immutable.
s = '20110104'
def option_1():
return '-'.join([s[:4], s[4:6], s[6:]])
def option_1a():
return '-'.join((s[:4], s[4:6], s[6:]))
def option_2():
return '{}-{}-{}'.format(s[:4], s[4:6], s[6:])
def option_3():
return '%s-%s-%s' % (s[:4], s[4:6], s[6:])
def option_original():
return s[:4] + "-" + s[4:6] + "-" + s[6:]
Running %timeit
on each yields these results
- option_1: 35.9 ns per loop
- option_1a: 35.8 ns per loop
- option_2: 36 ns per loop
- option_3: 35.8 ns per loop
- option_original: 36 ns per loop
So... pick the most readable because the performance improvements are marginal
You could use .join()
to clean it up a little bit:
d = c['date']
'-'.join([d[:4], d[4:6], d[6:]])
Dates are first class objects in Python, with a rich interface for manipulating them. The library is datetime.
> import datetime
> datetime.datetime.strptime('20110503','%Y%m%d').date().isoformat()
'2011-05-03'
Don't reinvent the wheel!