我已经完成了这段代码,但输出并不像我想要的那样
def replace(s,p,n):
return "".join("{}".format(p) if not i % n else char for i, char in enumerate(s,1))
print(replace("university","-",3))
我得到的输出是un-ve-si-y
我必须得到它:
uni-ver-sit-y
答案 0 :(得分:4)
这是一种方法。使用str
切片。
<强>演示:强>
def replace(s,p,n):
return p.join([s[i:i+n] for i in range(0, len(s), n)])
print(replace("university","-",3))
<强>输出:强>
uni-ver-sit-y
答案 1 :(得分:1)
如果您将代码扩展到多行:
chars_to_join = []
for i, char in enumerate(s,1):
if not i % n:
chars_to_join.append("{}".format(p))
else:
chars_to_join.append(char)
你会看到,当if语句为true时,它只是替换字符而不是在给定字符后包含替换字符,所以只需修改格式字符串以包含当前迭代的字符以及< / p>
"{}{}".format(char, p)
答案 2 :(得分:0)
对于这个问题,我认为列表理解不是一个好主意。目前尚不清楚。也许我们可以通过以下方式更清楚地说明:
def replace(s,p,n):
new_list = []
for i, c in enumerate(s, 1):
new_list.append(c)
if i % n == 0:
new_list.append(p)
return "".join(new_list)
print(replace("university","-",3))
答案 3 :(得分:0)
或者你可以这样做:
from itertools import repeat
def take(s, n):
""""take n characters from s"""
return s[:n]
def skip(s, n):
""""skip n characters from s"""
return s[n:]
def replace(s, p, n):
# create intervals at which to prefix
intervals = range(0, len(s), n)
# create the prefix for all chunks
prefix = map(skip, repeat(s), intervals)
# trim prefix for n characters each
chunks = map(take, prefix, repeat(n))
return p.join(chunks)
现在:
replace('university', '-', 3)
会给你:
'uni-ver-sit-y'
注意:这是示例代码,如果这是有效的,您可能应该使用延迟评估函数(如islice
),这可能会为较大的输入占用更少的内存。