Fastest way to insert these dashes in python string?

前端 未结 8 1502
失恋的感觉
失恋的感觉 2021-02-13 16:34

So I know Python strings are immutable, but I have a string:

c[\'date\'] = \"20110104\"

Which I would like to convert to

c[\'da         


        
相关标签:
8条回答
  • 2021-02-13 17:05
    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

    0 讨论(0)
  • 2021-02-13 17:06

    I'm not usually the guy saying "use regex," but this is a good use-case for it:

    import re    
    c['date']=re.sub(r'.*(\w{4})(\w{2})(\w{2}).*',r"\1-\2-\3",c['date'])
    
    0 讨论(0)
  • 2021-02-13 17:07

    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.

    0 讨论(0)
  • 2021-02-13 17:10

    Add hyphen to a series of strings to datetime

    import datetime
    for i in range (0,len(c.date)):
      c.date[i] = datetime.datetime.strptime(c.date[i],'%Y%m%d').date().isoformat()
    
    0 讨论(0)
  • 2021-02-13 17:15

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

    d = c['date']
    '-'.join([d[:4], d[4:6], d[6:]])
    
    0 讨论(0)
  • 2021-02-13 17:18

    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!

    0 讨论(0)
提交回复
热议问题