[英]Replacing characters from string one to string two
我需要创建一个带参数的函数(character,stringOne,stringTwo)。 该函数返回一个新单词,其中包含与stringTwo相同的数据+ stringOne中相同位置的任何字符。
例:
我迷失了我应该如何继续。
def replace(char, word1, word2):
newWord = ""
for s in range(len(word1)):
if word1[s] == char:
return
继续你所做的,使用简单的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
以防您不熟悉三元操作。
以下是修改现有代码的方法,以便它能够满足您的需求。 我已将newWord
更改为new_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
短,则此代码将引发IndexError: string index out of range
异常。
有各种更好的方法来实现此功能。 首先,我们可以使用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
将正常停止。
我们可以通过用条件表达式替换if... 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
方法将该列表转换为字符串。
def replace(char, word1, word2):
return ''.join([char if c1 == char else c2
for c1, c2 in zip(word1, word2)])
也可以使用生成器表达式来完成此操作。
''.join(char if c1 == char else c2 for c1, c2 in zip(word1, word2))
然而,由于.join
工作方式,这比使用列表理解效率低。 .join
必须扫描其参数两次:第一次扫描用于计算输出字符串的总大小,第二次扫描用于实际连接。 但是你无法扫描生成器两次,所以如果你通过.join
生成器,它必须从生成器构建一个临时列表。
您还可以使用列表推导,迭代和替换。
>>> x, y, c = 'apple', '12345', 'p'
>>> ''.join([c if x[i] == c else s for i, s in enumerate(y)])
'1pp45'
Pythonic方式:
>>> 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'
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)
最简单的解决方案是遍历word1的字符,如果找到与我们感兴趣的字符匹配的字符,那么我们将替换word2中该索引处的字符。
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.