Python 将字符串1中的字符替换为字符串2

Python 将字符串1中的字符替换为字符串2,python,Python,我需要创建一个接受参数(character、stringOne、stringTwo)的函数。该函数返回一个新词,该新词包含与stringTwo相同的数据+stringOne中位于相同位置的任何字符 例如: stringOne=“苹果” stringTwo=“12345” character=“p” 应返回“1pp45” 我不知道该怎么做 def replace(char, word1, word2): newWord = "" for s in range(len(word1)):

我需要创建一个接受参数(character、stringOne、stringTwo)的函数。该函数返回一个新词,该新词包含与stringTwo相同的数据+stringOne中位于相同位置的任何字符

例如:

  • stringOne=“苹果”
  • stringTwo=“12345”
  • character=“p”
  • 应返回“1pp45”
我不知道该怎么做

def replace(char, word1, word2):
newWord = ""
for s in range(len(word1)):
    if word1[s] == char:
return

您还可以使用列表理解、迭代和替换

>>> x, y, c = 'apple', '12345', 'p'              
>>> ''.join([c if x[i] == c else s for i, s in enumerate(y)])
'1pp45'
肾盂道:

>>> stringOne = "apple" 
>>> stringTwo = "12345"
>>> my_char = "p"
>>> "".join([x[1] if my_char!=x[0] else x[0] for x in zip(stringOne, stringTwo)])
'1pp45'

继续您已经完成的操作,使用简单的
for loop
和三元操作,这是如何完成的:

def replace(char, word1, word2):
    newWord = ""
    for s in range(len(word1)):
        newWord += char if word1[s] == char else word2[s]
    return newWord
这相当于:

def replace(char, word1, word2):
    newWord = ""
    for s in range(len(word1)):
        if word1[s] == char:
            newWord += char
        else:
            newWord += word2[s]
    return newWord

以防您不熟悉三元运算。

最简单的解决方案是迭代word1的字符,如果找到与我们感兴趣的字符匹配的字符,那么我们将替换word2中该索引处的字符

def replace(char, word1, word2):
    newWord= list(word2)
    for counter in range(min(len(word1), len(word2))):
            if word1[counter]== char:
                    newWord[counter]= char
    return "".join(newWord)
def replace(char, word1, word2):
    newWord = ""
    word2List = list(word2)
    # Check is character is present in word1
    # and if length of word1 and word2 are equal
    if char not in word1 or len(word1) != len(word2):
        return False
    else:
        for i,c in enumerate(word1):
            if c == char:
                word2List[i] = c



    # Converting list back to string
    return ''.join(word2List)

print(replace('p','apple','12345'))
输出:

1pp45

下面介绍如何修改现有代码,使其满足您的需要。我已将
newWord
更改为
new\u-word
,以符合标准的Python风格约定

def replace(char, word1, word2):
    new_word = ""
    for i in range(len(word2)):
        if word1[i] == char:
            new_word += char
        else:
            new_word += word2[i]
    return new_word

# Test
print(replace("p", "apple", "12345"))    
输出

1pp45
请注意,如果
word1
word2
短,此代码将引发
索引器错误:字符串索引超出范围
异常

有多种更好的方法来实现此功能。首先,我们可以使用
zip
函数并行迭代两个字符串的字符。这比使用字符串索引访问字符的间接迭代要简洁一些

def replace(char, word1, word2):
    new_word = ""
    for c1, c2 in zip(word1, word2):
        if c1 == char:
            new_word += char
        else:
            new_word += c2
    return new_word
请注意,如果字符串的长度不同,则当较短的字符串结束时,
zip
将优雅地停止

如果。。。else使用条件表达式块

def replace(char, word1, word2):
    new_word = ""
    for c1, c2 in zip(word1, word2):
        new_word += char if c1 == char else c2
    return new_word
''.join(char if c1 == char else c2 for c1, c2 in zip(word1, word2))

更高级的版本使用列表理解来构建所需字符的列表和字符串
。join
方法将该列表转换为字符串

def replace(char, word1, word2):
    return ''.join([char if c1 == char else c2 
        for c1, c2 in zip(word1, word2)])
也可以使用生成器表达式执行此操作

def replace(char, word1, word2):
    new_word = ""
    for c1, c2 in zip(word1, word2):
        new_word += char if c1 == char else c2
    return new_word
''.join(char if c1 == char else c2 for c1, c2 in zip(word1, word2))

但是,由于
.join
的工作方式,这比使用列表理解效率低
.join
必须扫描其参数两次:第一次扫描用于计算输出字符串的总大小,第二次扫描用于实际连接。但是你不能扫描一个生成器两次,所以如果你通过
.join
一个生成器,它必须从生成器中建立一个临时列表

您应该修复代码示例的缩进。我不会向那些努力学习编程的人展示这种代码。