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

问题描述 投票:11回答:8

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

c['date'] = "20110104"

我想转换为

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

我的代码:

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

似乎有点令人费解,不是吗?最好将它另存为一个单独的变量,然后执行相同操作吗?还是基本上没有区别?

python string string-formatting
8个回答
18
投票

您可以使用.join()稍微清理一下:

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

6
投票

与使用字符串连接相比,最好使用字符串格式

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

字符串连接通常较慢,因为如上所述,字符串是不可变的。


5
投票

日期是Python中的一流对象,具有用于操作它们的丰富接口。库为datetime

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

不要重新发明轮子!


3
投票
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

所以...请选择可读性最高的代码,因为性能的提高很小。


1
投票

我可能会这样,而不是有很多收获:


1
投票

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


1
投票

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


0
投票

导入日期时间对于范围(0,len(stringency.Date))中的i:c ['date'] = datetime.datetime.strptime(stringency.Date [i],'%Y%m%d')。date()。isoformat()

© www.soinside.com 2019 - 2024. All rights reserved.