我现在的代码
sentence = "Sentence!"
print(*sentence[::3], sep="--")
输出:S--t--c
我如何能够反转切片,以便相同的输入将导致-en-en-e!
我尝试在::3
中使用-3和不同的数字,但是没有用
答案 0 :(得分:2)
使用切片无法实现您要实现的目标,因为要保留的索引(1、2、4、5、7、8)不是arithmetic progression。
由于目标是用-
符号代替每三个字符的第一个字符,所以我能想到的最简单的解决方案是使用正则表达式:
>>> import re
>>> re.sub(".(.{0,2})", r"-\1", "Sentence!")
'-en-en-e!'
>>> re.sub(".(.{0,2})", r"-\1", "Hello, world!")
'-el-o,-wo-ld-'
{0,2}
表示即使最后一组没有三个字母,模式也将匹配。
答案 1 :(得分:2)
赞:
<a href="{{ route('userProfile', clean($doctor->slug)) }}">
{{ !empty($doctor->profile->gender_title) ? Helper::getDoctorArray(clean($doctor->profile->gender_title)) : '' }}
</a>
<br>
<a href="{{ route('userProfile', clean($doctor->slug)) }}">
{{{Helper::getUserName($doctor->id)}}}
</a>
编辑:在评论中解决问题:
这行得通,尽管我如何才能从第三个字母开始?
您可以尝试以下方法:
sentence = 'Sentence!'
import re
tokens = re.findall(r'.(..)', sentence)
print('', '-'.join(tokens), sep='-') # prints: -en-en-e!
这将输出:tokens = re.findall(r'(..).?', sentence[2:])
print(*tokens, sep='-')
这是您想要的吗?
答案 2 :(得分:2)
如果您想真正地反转范围,请在该范围内获取索引 not :
''.join(sentence[i] if i not in range(0, len(sentence), 3) else '-'
for i in range(len(sentence)))
输出
'-en-en-e!'
我个人更喜欢正则表达式解决方案。
答案 3 :(得分:1)
另一种尝试:
sentence = ("Sentence!")
print(''.join(ch if i % 3 else '-' for i, ch in enumerate(sentence)))
打印:
-en-en-e!
如果sentence='Hello, world!'
:
-el-o,-wo-ld-
答案 4 :(得分:1)
您可以使用切片分配:
def invert(string, step, sep):
sentence = list(string)
sentence[::step] = len(sentence[::step]) * [sep]
return ''.join(sentence)
print(invert('Sentence!', 3, '*'))
# *en*en*e!
print(invert('Hallo World!', 4, '$'))
# $all$ Wo$ld!