我尝试了各种方法,最快的方法是在存在选项卡的索引处执行条件替换
def testReplace(sList):
return [s.replace("\t"," ") for s in sList]
noTabs = str.maketrans("\t"," ")
def testTrans(sList):
return [s.translate(noTabs) for s in sList]
def joinSplit(sList):
return "\n".join(sList).replace("\t"," ").split("\n")
def conditional(sList):
result = sList.copy() # not needed if you intend to replace the list
for i,s in enumerate(sList):
if "\t" in s:
result[i] = s.replace("\t"," ")
return result
性能检查:
from timeit import timeit
count = 100
strings = ["Hello World"*10]*1000 # ["Hello \t World"*10]*1000
t = timeit(lambda:testReplace(strings),number=count)
print("replace",t)
t = timeit(lambda:testTrans(strings),number=count)
print("translate",t)
t = timeit(lambda:joinSplit(strings),number=count)
print("joinSplit",t)
t = timeit(lambda:conditional(strings),number=count)
print("conditional",t)
输出:
# With tabs
replace 0.03365320100000002
translate 0.08165113099999993
joinSplit 0.027709890000000015
conditional 0.007067911000000038
# without tabs
replace 0.015160736000000008
translate 0.07439537500000004
joinSplit 0.017001820000000056
conditional 0.0065534649999999806