为列表中的第n个字符添加“:”

时间:2019-04-30 18:18:04

标签: python python-3.x

说我有这个:

x = ["hello-543hello-454hello-765", "hello-745hello-635hello-321"]

我如何将输出发送到:

["hello-543: hello-454: hello-765", "hello-745: hello-635: hello-321"]

2 个答案:

答案 0 :(得分:1)

您可以使用range通过列表理解根据子字符串的长度来分割每个字符串,其中步长是每个子字符串应包含的字符数。然后使用join将每个列表转换回带有所需分隔符的字符串。

x = ["hello-543hello-454hello-765", "hello-745hello-635hello-321"]

n = 9
result = [': '.join([s[i:i+n] for i in range(0, len(s), n)]) for s in x]
print(result)
# ['hello-543: hello-454: hello-765', 'hello-745: hello-635: hello-321']

或使用textwrap.wrap

from textwrap import wrap

x = ["hello-543hello-454hello-765", "hello-745hello-635hello-321"]

n = 9
result = [': '.join(wrap(s, n)) for s in x]
print(result)
# ['hello-543: hello-454: hello-765', 'hello-745: hello-635: hello-321']

答案 1 :(得分:0)

如果您确定每个str的长度都是n的倍数,那么我将使用re.findall来完成该任务。

import re
txt1 = "hello-543hello-454hello-765"
txt2 = "hello-745hello-635hello-321"
out1 = ": ".join(re.findall(r'.{9}',txt1))
out2 = ": ".join(re.findall(r'.{9}',txt2))
print(out1) #hello-543: hello-454: hello-765
print(out2) #hello-745: hello-635: hello-321
.{9}中的

re.findall表示除换行符(9之外的所有字符中的\n,因此只要您的str都可以正常工作不包含\n。如果不成立,则需要添加re.DOTALL作为re.findall

的第三个参数