所以我试图将python中的一些错综复杂的东西现在只是为了摆动,我试图在我的字符串中插入东西。我想返回一个字符串的副本,所有设置字母加倍。我的信件是l
m
n
q
t
所以我的钱输出看起来像是mmonney
这是来自我剥离字母的不同尝试的代码,我试图想出如何更改这个,所以我加倍列表中的字母。有什么建议吗?
def double(str):
letters = ('l', 'm', 'n', 'q', 't')
for char in str:
if c.lower() in letters:
str = str.replace(c,"")
return str
答案 0 :(得分:1)
请注意,如果使用这么多str替换它,它将不会使您的函数具有很高的可伸缩性。
def double(word):
letters = ('l', 'm', 'n', 'q', 't')
return "".join([p*2 if p in letters else p for p in word])
通常python中的字符串修改操作(以及其他一些语言很慢)因为字符串是不可变的。每次进行替换调用时,您实际上是从头开始创建一个全新的字符串。
另一方面,这里给出的方法是处理两个列表。附加到列表是一种快速操作。
答案 1 :(得分:0)
你可以直接遍历字符串,然后两次添加字符。
def double(str):
new_str = ""
letters = ('l', 'm', 'n', 'q', 't')
for c in str:
if c.lower() in letters:
new_str += c + c
return new_str
print(double("money"))
答案 2 :(得分:0)
<强>方法一:强>
当您在for循环中迭代字符串时,循环迭代将限制为字符串的初始长度。因此,当您尝试使用字符副本替换时,将忽略尾随字符。
因此,您可以拥有一个new_string,根据您的条件添加字符!
def double(str):
letters = ('l', 'm', 'n', 'q', 't')
new_str=''
for c in str:
if c.lower() in letters:
new_str += c
new_str+=c
return new_str
print double('money')
<强>方法2:强>
您还可以使用正则表达式来简化操作。
加入你的元组以形成一个字符串,re.sub(regex_pattern,substitution_string,your_string)将匹配的regex组替换为第二个参数给出的值! (\1
用于获取匹配的组)
st='money'
letters = ('l', 'm', 'n', 'q', 't')
import re
print re.sub('(%s)'%'|'.join(letters),'\\1\\1',st)
输出:
mmonney
答案 3 :(得分:0)
不要将str
用作变量名称。
str
is builtin class in python
试试这段代码
_string = "money" # example
def double(string):
letters = ('l', 'm', 'n', 'q', 't')
result = list()
for s in string:
if s in letters:
result.append(s.lower() * 2)
else:
result.append(s.lower())
return "".join(result)
if __name__ == "__main__":
print double(_string)
输出
mmonney
答案 4 :(得分:0)
def doub(inputStr):
specialChars = ['l','m','n','q','t']
outputStr = ""
for i in inputStr:
if i in specialChars:
outputStr = outputStr + i + i
else:
outputStr = outputStr + i
return outputStr
print doub("aldamnasamnahoqtk")