Python 3.x 插入“\";字符串中具有给定位置的字符

Python 3.x 插入“\";字符串中具有给定位置的字符,python-3.x,Python 3.x,我正在开发一个python函数名reformate(str,n),其目的是在给定位置插入“\n”字符(这里是第三个位置) 例如,重塑(3,“abc de fghij”)的结果应该是“abc\ndef\nghi\nj” 这是我的函数代码: def InsertCharacter(string,n): i=n str1 ="" string=string.replace(" ","") while((i%n == 0) and (i < len(string)

我正在开发一个python函数名
reformate(str,n)
,其目的是在给定位置插入
“\n”
字符(这里是第三个位置)

例如,重塑(3,“abc de fghij”)的结果应该是
“abc\ndef\nghi\nj”

这是我的函数代码:

def InsertCharacter(string,n):
    i=n
    str1 =""
    string=string.replace(" ","")
    while((i%n == 0) and (i < len(string) -1)):
        s1= string[:i]
        s2= string[i:]
        str1 = str1 +s1 + "\n" +s2 
        i=i+1
    return(str1)
我不明白为什么我没有得到预期的结果
感谢您的帮助

您可以使用带有范围和切片的列表理解来对输入字符串进行分块,然后在换行上加入结果:

>>> s = "abc de fghij"
>>> s = s.replace(" ", "")
>>> step = 3
>>> "\n".join([s[i:i+step] for i in range(0, len(s), step)])
'abc\ndef\nghi\nj'
>>> step = 4
>>> "\n".join([s[i:i+step] for i in range(0, len(s), step)])
'abcd\nefgh\nij'

这里的输出不仅仅是在第三个位置插入
“\n”
。它还删除了空格。这里的逻辑是什么?@ggorlen,是的,它应该删除空格并在每个第三个位置插入“\n”。您不会得到多个
\n
,因为经过一两次迭代后,
i%n==0
不再为真,您将退出循环。此外,切片没有多大意义。无需从起点到交换点再到终点重复切割,O(n^2)复杂性
s[i:i+step]
就足够了。顺便说一句,我建议阅读。
对于
和列表理解基本上是等价的。您可以将任何列表理解重新编写为
for
循环,将任何
for
循环重新编写为
while
,但每一步都会使它更混乱、更不容易出错。使用代替列表comp的唯一原因是列表comp中的操作太嵌套或太冗长,无法读取<当终止条件可变时,代码>while应仅替换的
,这是一种非典型情况,因为大多数循环都是固定长度的列表或iterables。
>>> s = "abc de fghij"
>>> s = s.replace(" ", "")
>>> step = 3
>>> "\n".join([s[i:i+step] for i in range(0, len(s), step)])
'abc\ndef\nghi\nj'
>>> step = 4
>>> "\n".join([s[i:i+step] for i in range(0, len(s), step)])
'abcd\nefgh\nij'