str.replace()方法如何工作?

时间:2017-11-16 18:52:21

标签: python python-3.x

我有这个输入:

'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)

这样做的正确方法是什么?

2 个答案:

答案 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)