迭代一个字符串并替换python中的元素

时间:2013-02-21 20:25:44

标签: python string replace indexing

我正在尝试搜索两个字符串以查找匹配元素。如果字符串有两个共同位于不同位置的元素,我想让'guess'字符串中的元素成为COW。如果字符串在同一位置有两个元素,则该元素为BULL。

这就是我所拥有的:

        if index(number,i) in guess and not index(guess,i) == index(guess,i):
            replace(index(guess,i),'COW')

        if index(guess,i) == index(number,i):
            replace(index(guess,i),'BULL')

我不确定我是否正确使用索引。

2 个答案:

答案 0 :(得分:0)

首先,你需要使用index()replace()作为字符串方法,就像Martijn在评论中所说的那样。

就是这样:guess.index(i)在字符串i中找到guess的索引。

您可能需要查看find(),它与index()相同,但在找不到子字符串时不会引发异常。

另请注意,您正在查看index()的结果是否在字符串guess中。这是一个错误,因为整数不能在字符串中! index()返回一个整数!

然后考虑你说... and not guess.index(i) == guess.index(i):(我修复了index代码)没有意义,因为它们当然是平等的!他们是一回事!

最后,您错误地使用了replace。 从the documentation开始,replace将字符串作为第一个参数 - 而不是索引!尝试使用它:guess = guess.replace(i, 'BULL')。这将更改guess以使所有出现的i替换为字符串'BULL'

我这里并不关心你的实际算法,只是你的基本错误。

答案 1 :(得分:0)

我不会使用index()方法。相反,我会将字符串的元素转换为列表,然后说:

listOne = [hello,goodbye,adios, shalom]
listTwo = [hello,adios,arrivaderci]

def cowbull(L1, L2):
    for i in range(len(L1)):
        if L1[i] in L2:
            if L1[i] == L2[i]:
                L1[i] = 'BULL'
                L2[i] = 'BULL'
            else:
                L1[i] = 'COW'
                L2[L1[i]] = 'COW'

这就是我将如何做到这一点,但使用你和威廉的代码的方式也可以很好地工作。我只是习惯这样做,而且很可能没有他那么高效,但它通常效果很好。