Python:用句点(或其他字符)替换字符串中除第n个字母以外的每个字母
所以我看了第n个字母的替换,却找不出相反的字母。我从这个开始,很快意识到它行不通:Python:用句点(或其他字符)替换字符串中除第n个字母以外的每个字母,python,python-3.x,Python,Python 3.x,所以我看了第n个字母的替换,却找不出相反的字母。我从这个开始,很快意识到它行不通: 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]) 任何帮助都将不胜感激。让s为原始字符串,n为不可替换的位置 ''.join (c if i
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])
任何帮助都将不胜感激。让
s
为原始字符串,n
为不可替换的位置
''.join (c if i == n else '.' for i, c in enumerate (s) )
如果用户输入
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..'
您可以使用以下方法:
>>> 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..
根据您已经知道的内容进行构建。您知道如何查找每个
n
th字符,结果字符串中包含所有字符,而原始字符串中没有其他字符,因此我们可以使用它。我们希望在它们之间插入东西,这正是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..'
我棘手的解决方案(我会让你添加评论):
给出:
..c..f..i..l..o..r..u..x..
这并不能取代任何东西,它省略了。但是我不确定如何阅读这个问题。文本指向您的解决方案。代码示例指向我的。让我们看看OP的答案是什么。“Python:替换除第n个字母以外的所有字母”。。。只有第N封信…@海波雷乌斯:我想我是完全颠倒过来了。让我们希望OP能澄清一些事情……对我来说,OP似乎想要第二个字符,但是使用
i%remove
而不是(i+1)%remove
。如果只想替换1个字符,那么连接和切片可能会更快:“”。join((s[:n],,,,,,,s[n+1:])
,尽管如果n
小于0或>=len(s),它可能会给出奇怪的结果。s=“abcdefghi”
和n=3
的预期结果是什么?
..c..f..i..l..o..r..u..x..