我有这个输入:
'0472/91.39.17'
我想逐个用'1234567890'
替换我的输入:
'1234/56.78.90'
但我的结果是
0472/91.09.17
这是我的代码
phone = '0472/91.39.17'
repl = 1234567890
for i in phone:
if i.isdigit():
for j in str(repl):
x = phone.replace(i, j)
print(x)
这样做的正确方法是什么?
答案 0 :(得分:3)
如果原始值为数字,您可以将repl
转换为迭代器并使用生成器表达式将phone
中的任何值替换为repl iter中的下一个值。将其与''.join
重新组合以得到一个字符串作为结果,鲍勃是你的叔叔。
repliter = iter(str(repl))
result = ''.join(next(repliter) if c.isdigit() else c for c in phone)
# the ternary expression here evaluates to:
# if c.isdigit():
# next(repliter)
# else:
# c
请注意,如果您的电话号码包含超过10位数,则会因StopIteration
错误而崩溃,因此请考虑使用itertools.cycle
代替repliter
。
import itertools
repliter = itertools.cycle(str(repl)) # 1 2 3 4 5 6 7 8 9 0 1 2 3 ...
答案 1 :(得分:0)
我原以为你可以使用带有模数的itertools计数来表示高于10的数字。
from itertools import count
c = count(0) # start number
phone = '0472/91.39.17'
''.join(str(next(c) % 10) if item.isdigit() else item for item in phone)