在Python中第一个','之前连接两个字符串并删除所有内容的最有效方法是什么?

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)

这在我的代码中运行了数百万次,并且我已将其识别为瓶颈,因此我热衷于优化它以使其运行更快.

这样做最有效(在运行时方面)?

Gab*_*aru 9

用这个:

if mystr == '':
    mystr = latestValue
else:
    mystr = mystr[mystr.find(",")+1:] + "," + latestValue
Run Code Online (Sandbox Code Playgroud)

这应该比分割列表的任何解决方案快得多.它只找到第一次出现,并"删除"字符串的开头.此外,如果列表为空,那么mystr将是latestValue(由此添加的微不足道的开销) - 感谢Paulo Scardine指出这一点.


Joh*_*ooy 6

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)


jfs*_*jfs 6

_, sep, rest = mystr.partition(",")
mystr = rest + sep + latestValue
Run Code Online (Sandbox Code Playgroud)

也是如果工作没有任何改变mystr为空或(后没有逗号)单个项目由于str.partition返回空sep,如果没有sepmystr.

你可以mystr.rstrip(",")在调用之前使用,partition()如果可能有一个尾随逗号mystr.