通过索引获取字符串的多个字符

时间:2018-10-22 01:15:03

标签: python python-3.x string-operations

我需要根据索引模板(掩码?)从字符串中punch()除去特定字符。

例如,我需要在有1

的地方打出所有字符
str = abcdefg
mask = 0011001

// len(str) = len(mask) always

print(punch(str, mask)) //Ouput: cdg 

基本上,我需要打印给定字符串的所有非空子序列:

Input: abcd
Output: a, b, c, d, ab, ac, ad, bc, bd, cd, abc, abd, acd, bcd, abcd

我正在尝试使用蛮力实施此操作,因此我将生成用于输入字符串长度的所有模板,并使用punch()“打孔”那些子序列。

PS:这可能是解决此问题的一种不好的方法,但我认为punch()有一个很不错的方法。

2 个答案:

答案 0 :(得分:3)

您可能会使用Itertools中的“ compress()”来创建二进制过滤器。

Compress有两个参数

  1. 您想遍历并“打出”字符的可重复性

  2. 定义第一个可迭代元素的数据将被删除。任何“ True”元素都可以使compress从第一个可迭代元素中删除该元素

    Screenshot from the Itertools Docs

答案 1 :(得分:2)

如果我正在阅读要正确执行的操作,则可以使用类似这样的功能。

def punch(str, mask):
   if (len(str) == len(mask)):
       new_list = []
       for i in range(len(str)):
           if mask[i] == "1":
             new_list.append(str[i])
       return new_list
   else:
       return -1