Python:用句点(或其他字符)替换字符串中第n个字母以外的每个字母

时间:2014-01-29 07:46:45

标签: python python-3.x

所以我看了每一个字母的替换,并且无法弄清楚相反的情况。我从这开始,很快意识到它不起作用:

s = input("Enter a word or phrase: ")
l = len(s)

n = int(input("choose a number between 1 and %d: " %l))

print (s[0] + "." * (n-1)+ s[n]+ "." * (n-1) + s[n*2])

任何帮助将不胜感激。

5 个答案:

答案 0 :(得分:1)

s成为原始字符串,n不要替换该位置。

''.join (c if i == n else '.' for i, c in enumerate (s) )

答案 1 :(得分:1)

如果用户输入3,我假设您要替换第三,第六,第九......字母,对吗?请记住,索引是从0计算的:

>>> s = "abcdefghijklmnopqrstuvwxyz"
>>> remove = 3
>>> "".join(c if (i+1)%remove else "." for i,c in enumerate(s))
'ab.de.gh.jk.mn.pq.st.vw.yz'

或者,如果你的意思相反:

>>> "".join("." if (i+1)%remove else c for i,c in enumerate(s))
'..c..f..i..l..o..r..u..x..'

答案 2 :(得分:1)

您可以使用reduce方式:

>>> s = "abcdefghijklmnopqrstuvwxyz"
>>> n=3
>>> print reduce(lambda i,x: i+x[1] if (x[0]+1)%n else i+".", enumerate(s), "")
ab.de.gh.jk.mn.pq.st.vw.yz
>>> print reduce(lambda i,x: i+"." if (x[0]+1)%n else i+x[1], enumerate(s), "")
..c..f..i..l..o..r..u..x..

答案 3 :(得分:0)

从你已经知道的东西建立。你知道如何找到每个n个字符,你的结果字符串将包含其中的所有字符,而原始字符串中没有其他字符,所以我们可以使用它。我们想在之间插入,这正是str.join方法所做的。您已经知道要插入的内容是'.' * n-1。所以,你可以这样做:

>>> s = "abcdefghi"
>>> n = 3
>>> ('.' * (n-1)).join(s[::n])
'a..d..g'

唯一的诀窍是,您需要在之后考虑之后的任何字符。当s的最高有效索引除以n - 或(len(s) - 1) % n时,其余数量为余数。这给出了一个稍微丑陋的结果:

>>> ('.' * (n-1)).join(s[::n]) + '.' * ((len(s) - 1) % n)
'a..d..g..'

您可能希望使用两组点的变量来帮助提高可读性:

>>> dots = '.' * (n - 1)
>>> end_dots = '.' * ((len(s) - 1) % n)
>>> dots.join(s[::n]) + end_dots
'a..d..g..'

答案 4 :(得分:0)

我棘手的解决方案(我会让你添加评论):

s = 'abcdefghijklmnopqrstuvwxyz'
n = 3
single_keep_pattern = [False] * (n - 1) + [True]
keep_pattern = single_keep_pattern * ( len(s) / n + 1)
result_list = [(letter if keep else '.') for letter, keep in zip(s, keep_pattern)]
result = ''.join(result_list)

print result

给出:

..c..f..i..l..o..r..u..x..