3

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

例如,我需要将所有有a的字符都打出来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()有一个很好的方法。

4

2 回答 2

3

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

压缩有两个参数

  1. 您想要遍历并“打出”字符的可迭代对象

  2. 定义从第一个迭代中删除哪些元素的数据。任何 'True' 元素都将启用 compress 以从第一个迭代中删除元素

    Itertools 文档的屏幕截图

于 2018-10-22T01:28:37.730 回答
2

If I'm reading what you want to do correctly, a function like this could work.

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
于 2018-10-22T01:21:54.077 回答