有没有办法选择一组索引并将其删除?

时间:2019-08-21 12:52:55

标签: python python-3.7

我正在做一个解码方法,该方法选择要删除的字符串中的一组索引值。但是现在的问题是我无法理解如何选择要删除的一组索引

我尝试列出要在字符串中找到并删除的项目列表,但这仅适用于几种类型的字符串集。

def decode(string, n):
    for i in range(0,len(string), n): 
        string = string.replace(string[i],'')
        return string

这里n是在给定索引处要删除的值的数量以及从何处开始删除所述值的索引

我了解如何遍历索引,但是我不确定如何根据索引删除字符串值。

print(decode('#P#y#t#h#o#n#',1)) #this works out to be Python

print(decode('AxYLet1x3’s T74codaa7e!',3 )) #this does not, this is supposed to be 'Let's Code'

4 个答案:

答案 0 :(得分:2)

带有“切换台” 标志:

def decode(inp_str, n):
    s = ''
    flag = True
    for i in range(0, len(inp_str), n):
        flag = not flag
        if flag: s += inp_str[i: i + n]
    return s

print(decode('#P#y#t#h#o#n#', 1))            # Python
print(decode('AxYLet1x3’s T74codaa7e!', 3))  # Let’s code!

答案 1 :(得分:1)

不同的方法是在正确的位置选择字符:

def decode(string, n):
    res = ''
    for i in range(len(string)//(2*n)+1):
        res += string[2*n*i+n:2*n*i+2*n]
    return res

答案 2 :(得分:1)

首先,您将在第一次迭代后立即返回。其次,您只需将第n个位置的字符替换为“”。

这应该满足您的要求,它将在每个“ n”个索引之后替换每个“ n”个字符:

def decode(string, n):
    for i in range(0,len(string)-1,n): 
        string = string[:i] + string[i+n:] # Remove elements at index "i", till "i+n"
    return string

输出:

print(decode('#P#y#t#h#o#n#',1)) # Output = Python

print(decode('AxYLet1x3’s T74codaa7e!',3 )) # Output = Let's Code

答案 3 :(得分:1)

通过迭代时不要更改其大小!

最好是将字符替换为字符串中不能包含的某个占位符,然后将其剥离。

例如对于第一个示例,您已经具有该字符串格式。将其删除到循环外(请记住,循环用于标记要删除的字符)将是:

return ''.join(c for c in string if c!='#')

关于这种方法中的循环本身,我现在将由您自己进行调试。 ;)查看索引如何在循环中移动,查看您的替换实际上所做的!例如。就像我在评论中所说的那样,n = 1会经过每个字符,而不是每个第二个字符!


另一种解决方案是使用索引进行智能切片。从您的示例假设您要“删除n,请保留n”代码:

def decode(string, n):
    result = ""
    for i in range(n,len(string), 2*n): # first index we want to keep is n, next is 3n, 5n... so we're jumping by 2n each time
        result += string[i: i+n]
    return result