Pet*_*e W 6 python algorithm concatenation
在Python中,我有一个字符串,它是逗号分隔的值列表.例如'5,2,7,8,3,4'
我需要在末尾添加一个新值并删除第一个值,
例如'5,22,7,814,3,4' - > '22,7,814,3,4,1'
目前,我这样做如下:
mystr = '5,22,7,814,3,4'
latestValue='1'
mylist = mystr.split(',')
mystr = ''
for i in range(len(mylist)-1):
if i==0:
mystr += mylist[i+1]
if i>0:
mystr += ','+mylist[i+1]
mystr += ','+latestValue
Run Code Online (Sandbox Code Playgroud)
这在我的代码中运行了数百万次,并且我已将其识别为瓶颈,因此我热衷于优化它以使其运行更快.
这样做最有效(在运行时方面)?
用这个:
if mystr == '':
mystr = latestValue
else:
mystr = mystr[mystr.find(",")+1:] + "," + latestValue
Run Code Online (Sandbox Code Playgroud)
这应该比分割列表的任何解决方案快得多.它只找到第一次出现,并"删除"字符串的开头.此外,如果列表为空,那么mystr将是latestValue(由此添加的微不足道的开销) - 感谢Paulo Scardine指出这一点.
mystr = mystr.partition(",")[2]+","+latestValue
Run Code Online (Sandbox Code Playgroud)
如果mystr有<2个元素,那么Paulo建议改进.
在0个元素的情况下,它确实扩展了mystr来保存一个元素.
_,_,mystr = (mystr+','+latestValue).partition(',')
$ python -m timeit -s "mystr = '5,22,7,814,3,4';latestValue='1'" "mystr[mystr.find(',')+1:]+','+latestValue"
1000000 loops, best of 3: 0.847 usec per loop
$ python -m timeit -s "mystr = '5,22,7,814,3,4';latestValue='1'" "mystr = mystr.partition(',')[2]+','+latestValue"
1000000 loops, best of 3: 0.703 usec per loop
Run Code Online (Sandbox Code Playgroud)
_, sep, rest = mystr.partition(",")
mystr = rest + sep + latestValue
Run Code Online (Sandbox Code Playgroud)
这也是如果工作没有任何改变mystr为空或(后没有逗号)单个项目由于str.partition返回空sep,如果没有sep在mystr.
你可以mystr.rstrip(",")在调用之前使用,partition()如果可能有一个尾随逗号mystr.
| 归档时间: |
|
| 查看次数: |
636 次 |
| 最近记录: |