我的Python代码有问题,包括replace函数

2024-10-01 17:31:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在创建一个函数,将字符串的多个部分替换为多个数字,但由于某些原因,输出不是我所期望的。你知道吗

from pyprimes import isprime
def prime_replace(x, l = []):
    lst = []
    string = str(x)
    for n in range(10):
        for i in l:
            string = string.replace(string[i], str(n))
        lst.append(int(string))
    return lst 

print prime_replace(x = 56243, l = [2, 3])

这个函数的输出是一个列表[56003、56113、56223、56333、56444、56555、66666、77777、88888、99999],但是我想要的是[56003、56113、56223、56333、56443、56553、56663、56773、56883、56993],有人能帮我一下,告诉我哪里出错了,谢谢。你知道吗


Tags: 函数字符串infromimportforstring原因
3条回答

你知道吗字符串.替换(a,b)用b替换a的所有实例。因此,“56243”。replace(3,0)的计算结果为“56240”。您正在尝试替换l中指示符号处的值,因此应该替换

string = string.replace(string[i], str(n))

string = string[:i] + str(n) + string[i+1:]

如果要替换的索引处的值在数字的其他位置重复,则另一个答案失败,即prime_replace(562432,[2,3])

您正在修改原始字符串,replace正在替换“所有出现”

下面是打印输出的一部分,它是如何生成您看到的输出的:

...
string is now 56333
replacing 3 with 3
string is now 56333
replacing 3 with 4
string is now 56444
...

您可以看到,我们成功地获得了您想要的56333,但是您想要用str(n)(实际值:4)替换str[2](实际值:3),它替换了3的所有出现

此特定场景的一个解决方法是复制字符串:

def prime_replace(x, l = []):
    lst = []
    string = str(x)
    for n in range(10):
        newstr = string
        for i in l:
            newstr = newstr.replace(string[i], str(n))
        lst.append(int(newstr))
    return lst 

print prime_replace(x = 56243, l = [2, 3])

输出:

[56003, 56113, 56223, 56333, 56443, 56553, 56663, 56773, 56883, 56993]

Demo (not recommended)

但是,^{}可能不是最佳选择,因为它将用“newstring”替换所有出现的“oldstring”。看起来您真正想做的是将string中的索引处的l更改为range(10)中的下一个值,我们可以通过索引和附加来实现这一点:

def prime_replace(x, l = []):
    lst = []
    string = str(x)
    for n in range(10):
        newstr = string
        for i in l:
            newstr = newstr[0:i]+str(n)+newstr[i+1:];
        lst.append(int(newstr))
    return lst 

Demo (better)

我还找到了另一种解决方法,将字符串转换为list

from pyprimes import isprime
def prime_replace(x, l):
    lst = []
    string_lst = list(str(x))
    for n in range(10):
        for i in l:
            string_lst[i] = str(n)
        lst.append(int("".join(string_lst)))
    return lst 

print prime_replace(56243, [2, 3])

输出

[56003, 56113, 56223, 56333, 56443, 56553, 56663, 56773, 56883, 56993]

但非常感谢你的解决方案。你知道吗

相关问题 更多 >

    热门问题