我正在编写一个脚本,我正在尝试创建一个字符串列表,在每个后续字符处都有一个输入字符的子字符。
my_replacement = input("Replacement character?: ")
orig_strng = ABCDEFGHIJKL
lst =[]
for i in range(len(orig_strng)):
a = function to replace orig_strng[i] with my_replacements
lst.append(a)
如果我的输入是X,则每次迭代的附加lst输出如下所示: XBCDEFGHIJKL,AXCDEFGHIJKL,ABXDEFGHIJKL等
我认为字符串本身是不可变的 - 所以我不能直接编辑它们。我怎么能以python-ic方式解决这个问题?
答案 0 :(得分:2)
def replace_each(s,letter):
for i,original_letter in enumerate(s):
yield "{0}{1}{2}".format(s[:i],letter,s[i+1:])
print(list(replace_each("ABCDEFGHI","x")))
我认为非常pythonic
答案 1 :(得分:1)
您可以将字符串转换为列表,执行替换,然后将其转换回join
def foo(my_string, i, replacement):
my_list = list(my_string)
my_list[i] = replacement
return "".join(my_list)
foo(orig_strng, 1, "X")
#'AXCDEFGHIJKL'
答案 2 :(得分:0)
字符串方法replace()
在这里适用于示例案例,但不一定适用于所有情况。
my_replacement = input("Replacement character?: ")
orig_strng = ABCDEFGHIJKL
lst =[]
for i in range(len(orig_strng)):
a = orig_strng.replace(orig_string[i], my_replacement)
lst.append(a)
如果你愿意,你可以用列表理解来做到这一点:
a = [orig_string.replace(orig_string[i], my_replacement) for i in orig_string]
答案 3 :(得分:0)
这是你的意思吗?
def foo(string,i,replacement):
return string[:i]+replacement+string[i+1:]
答案 4 :(得分:0)
我发现翻译表和翻译功能经常派上用场。就像你说的,字符串是不可变的,因此translate函数返回一个完成翻译的副本。
下面的示例允许您输入替换字符串(而不仅仅是单个字符),并且它将使用提供的输入字符替换要翻译的所有字符。
from string import maketrans
original = 'ABCDEFGHIJK'
n = len(original)
user_in = "XYZ" #can also just be a single character X
m = min(len(user_in), n)
for i in range(n):
trans_table = maketrans((original[i:] + original[:i])[:m], user_in[:m])
new = original.translate(trans_table)
print new
XYZDEFGHIJK
AXYZEFGHIJK
ABXYZFGHIJK
ABCXYZGHIJK
ABCDXYZHIJK
ABCDEXYZIJK