Skip to content Skip to sidebar Skip to footer

Fastest Way To Insert These Dashes In Python String?

So I know Python strings are immutable, but I have a string: c['date'] = '20110104' Which I would like to convert to c['date'] = '2011-01-04' My code: c['date'] = c['date'][0:4]

Solution 1:

You could use .join() to clean it up a little bit:

d = c['date']
'-'.join([d[:4], d[4:6], d[6:]])

Solution 2:

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!

Solution 3:

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.

Solution 4:

s = '20110104'defoption_1():
    return'-'.join([s[:4], s[4:6], s[6:]])

defoption_1a():
    return'-'.join((s[:4], s[4:6], s[6:]))

defoption_2():
    return'{}-{}-{}'.format(s[:4], s[4:6], s[6:])

defoption_3():
    return'%s-%s-%s' % (s[:4], s[4:6], s[6:])

defoption_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

Solution 5:

I'd probably do so this way, not that there's a great deal of gain:

d = c['date']
c['date'] = '%s-%s-%s' % (d[:4], d[4:6], d[6:])

The big improvement (imho) is avoiding string concatenation.

Post a Comment for "Fastest Way To Insert These Dashes In Python String?"