我在试着理解replace
方法。我有一系列的数字,我想做些调整。特别是,我将根据阈值对数字进行分类:
def makeAdjustment(x):
for each in x:
if int(each) < 5:
x = x.replace(each, "0")
else:
x = x.replace(each, "1")
return x
使用中:
>>> makeAdjustment("800857237867") == "100111001111"
True
>>> makeAdjustment("15889923") == "01111100"
True
>>> makeAdjustment("14963896") == "00110111"
True
但是,如果数字序列变大,则字符串将转换为零:
>>> makeAdjustment("366058562030849490134388085")
'000000000000000000000000000'
最佳答案
这里的问题不是字符串太大,而是不应该替换'1'
或'0'
的实例。当您稍后在字符串中遇到'1'
时(与上一个例子一样),您将用'1'
替换以前的所有'0'
实例。
一种解决方案是针对特殊情况:
def makeAdjustment(x):
for each in x:
if int(each) in {'1', '0'}:
continue
if int(each) < 5:
x = x.replace(each, "0", 1)
else:
x = x.replace(each, "1")
return x
这是一个选项,但并不是最好的,因为每次迭代都要调用
replace
在这里使用join
可以做得更好:def makeAdjustment(x):
return "".join("1" if int(i) > 5 else "0" for i in x)
更干净、更清晰、更快:
# for loop
%timeit makeAdjustment("366058562030849490343880185")
10000 loops, best of 3: 39.1 µs per loop
# join
%timeit makeAdjustment("366058562030849490343880185")
100000 loops, best of 3: 17.7 µs per loop
关于python - 如何正确循环并替换字符串中的元素?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43447690/