如何反转切片?

时间:2019-11-27 17:05:53

标签: python slice

我现在的代码

sentence = "Sentence!"
print(*sentence[::3], sep="--")

输出:S--t--c

我如何能够反转切片,以便相同的输入将导致-en-en-e!

我尝试在::3中使用-3和不同的数字,但是没有用

5 个答案:

答案 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!