繁体   English   中英

在python字符串中插入这些破折号的最快方法?

[英]Fastest way to insert these dashes in python string?

所以我知道 Python 字符串是不可变的,但我有一个字符串:

c['date'] = "20110104"

我想转换为

c['date'] = "2011-01-04"

我的代码:

c['date'] = c['date'][0:4] + "-" + c['date'][4:6] + "-" + c['date'][6:]

看起来有点绕,不是吗? 最好将它保存为一个单独的变量,然后再做同样的事情吗? 还是基本没有区别?

你可以使用.join()来清理一下:

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

您最好使用字符串格式而不是字符串连接

c['date'] = '{}-{}-{}'.format(c['date'][0:4], c['date'][4:6], c['date'][6:])

字符串连接通常较慢,因为正如您在上面所说的字符串是不可变的。

日期是 Python 中的第一类对象,具有用于操作它们的丰富接口。 图书馆是datetime

> import datetime
> datetime.datetime.strptime('20110503','%Y%m%d').date().isoformat()
'2011-05-03'

不要重新发明轮子!

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:]

对每个运行%timeit产生这些结果

  • option_1:每个循环 35.9 ns
  • option_1a:每个循环 35.8 ns
  • option_2:每个循环 36 ns
  • option_3:每个循环 35.8 ns
  • option_original:每个循环 36 ns

所以......选择最易读的,因为性能改进是微不足道的

我可能会这样做,而不是有很多好处:

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

最大的改进(恕我直言)是避免字符串连接。

我通常不会说“使用正则表达式”,但这是一个很好的用例:

import re    
c['date']=re.sub(r'.*(\w{4})(\w{2})(\w{2}).*',r"\1-\2-\3",c['date'])

我不确定您是否要将其转换为正确的日期时间对象,或者只是对格式进行硬编码,您可以执行以下操作:

from datetime import datetime
result = datetime.strptime(c['date'], '%Y%m%d')
print result.date().isoformat()

输入:'20110104'

输出:'2011-01-04'

将连字符添加到一系列字符串到日期时间

import datetime
for i in range (0,len(c.date)):
  c.date[i] = datetime.datetime.strptime(c.date[i],'%Y%m%d').date().isoformat()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM