Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:用句点(或其他字符)替换字符串中除第n个字母以外的每个字母_Python_Python 3.x - Fatal编程技术网

Python:用句点(或其他字符)替换字符串中除第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

所以我看了第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 == 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..