Python 我怎样才能反转切片?
我现在的代码Python 我怎样才能反转切片?,python,slice,Python,Slice,我现在的代码 sentence = "Sentence!" print(*sentence[::3], sep="--") 输出:S--t--c 我怎样才能反转切片,使相同的输入产生-en-en-e 我尝试过在:3中使用-3和不同的数字,但是没有任何效果使用切片无法实现您想要实现的目标,因为您想要保留的索引(1、2、4、5、7、8)不是索引 由于目标是用-符号替换每三个字符中的第一个字符,因此我能想到的最简单的解决方案是使用正则表达式: >>重新导入 >>>re.sub(“.({0,2})”,
sentence = "Sentence!"
print(*sentence[::3], sep="--")
输出:S--t--c
我怎样才能反转切片,使相同的输入产生-en-en-e代码>
我尝试过在:3中使用-3和不同的数字,但是没有任何效果使用切片无法实现您想要实现的目标,因为您想要保留的索引(1、2、4、5、7、8)不是索引
由于目标是用-
符号替换每三个字符中的第一个字符,因此我能想到的最简单的解决方案是使用正则表达式:
>>重新导入
>>>re.sub(“.({0,2})”,r“-\1”,“句子!”)
“-en-en-e!”
>>>re.sub(“.({0,2})”,r“-\1”,“你好,世界!”)
“-el-o,-wold-”
{0,2}
意味着即使最后一组没有三个字母,模式也会匹配。使用切片无法实现您想要实现的目标,因为您想要保留的索引(1,2,4,5,7,8)不是一个索引
由于目标是用-
符号替换每三个字符中的第一个字符,因此我能想到的最简单的解决方案是使用正则表达式:
>>重新导入
>>>re.sub(“.({0,2})”,r“-\1”,“句子!”)
“-en-en-e!”
>>>re.sub(“.({0,2})”,r“-\1”,“你好,世界!”)
“-el-o,-wold-”
{0,2}
表示即使最后一组没有三个字母,模式也会匹配。如下:
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='-')
这将输出:nt nc
这就是你想要的吗?像这样:
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='-')
这将输出:nt nc
这就是你想要的吗?如果你想真正反转范围,那么取不在该范围内的指数:
''.join(sentence[i] if i not in range(0, len(sentence), 3) else '-'
for i in range(len(sentence)))
输出
'-en-en-e!'
就我个人而言,我更喜欢正则表达式解决方案。如果你想真正反转范围,那么选择不在该范围内的索引:
''.join(sentence[i] if i not in range(0, len(sentence), 3) else '-'
for i in range(len(sentence)))
输出
'-en-en-e!'
就个人而言,我更喜欢正则表达式解决方案。另一种尝试:
sentence = ("Sentence!")
print(''.join(ch if i % 3 else '-' for i, ch in enumerate(sentence)))
印刷品:
-en-en-e!
如果句子class='Hello,world!'代码>:
-el-o,-wo-ld-
另一次尝试:
sentence = ("Sentence!")
print(''.join(ch if i % 3 else '-' for i, ch in enumerate(sentence)))
印刷品:
-en-en-e!
如果句子class='Hello,world!'代码>:
-el-o,-wo-ld-
您可以使用切片分配:
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!
您可以使用切片分配:
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!
如果字符串的长度不是三的倍数,则这将从最后一部分删除。@kaya3:同意。但我认为,由于原始海报的代码给出了“s--t--c”的输出,这就减少了最后一部分(最后的--
),(s)他更关心的是做字符串[::3]
的反转,而不是保留其余部分。(如果这不是真的,那么原始海报应该能够修改代码以处理3的非倍数。)我如何让它添加3的倍数tokens=re.findall(r.(..),(..),(..),句子)
尝试过类似的东西,但没有work@3891,我不知道你说的“让它加上3的倍数”是什么意思。您想输出一个总和吗?如果字符串的长度不是三的倍数,则最后一部分的总和将减少。@kaya3:同意。但我认为,由于原始海报的代码给出了“s--t--c”的输出,这就减少了最后一部分(最后的--
),(s)他更关心的是做字符串[::3]
的反转,而不是保留其余部分。(如果这不是真的,那么原始海报应该能够修改代码以处理3的非倍数。)我如何让它添加3的倍数tokens=re.findall(r.(..),(..),(..),句子)
尝试过类似的东西,但没有work@3891,我不知道你说的“让它加上3的倍数”是什么意思。你想输出一个总和吗?我喜欢这个解决方案,因为它尽可能接近切片逻辑的直接反转,更明显的是如何调整它以反转不同的切片。谢谢。这适用于各种各样的反转操作,但结果明显是冗长的。使用枚举
可以使它更简洁;我通常会尽量把“新技术”(超出原来的帖子)控制在最低限度。我已经有了一个条件理解和join
。我喜欢这个解决方案,因为它尽可能接近切片逻辑的直接反转,更明显的是如何调整它以反转不同的切片。谢谢。这适用于各种各样的反转操作,但结果明显是冗长的。使用枚举
可以使它更简洁;我通常会尽量把“新技术”(超出原来的帖子)控制在最低限度。我已经有了条件理解和加入。