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

3

我需要根据索引模板(掩码?)从字符串中删除特定字符,使用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()是一个很棒的方法。

如果 mask 是一个字符串:"".join(ch for ch, msk in zip(string, mask) if msk == "1") - jasonharper
2个回答

3
你可以使用Itertools中的“compress()”创建一个二进制过滤器。
compress需要两个参数:
1. 你想要遍历并“挤出”字符的可迭代对象。 2. 定义从第一个可迭代对象中删除哪些元素的数据。任何“True”元素都将使compress从第一个可迭代对象中删除该元素。 Itertools文档中的屏幕截图

1
这真是太棒了。itertools 没有被重命名为 solveeverysingleproblemeverwithnoeffort 的唯一原因是后者的名称无法阅读。 - Purple Ice

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接