Получить несколько символов строки по индексу - PullRequest
0 голосов
/ 22 октября 2018

Мне нужно 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 голосов
/ 22 октября 2018

Вы можете потенциально использовать «compress ()» из Itertools для создания бинарного фильтра.

Сжатие принимает два аргумента

  1. Итерируемое, которое вы хотите перейти и "вычеркнуть" символы

  2. Данныекоторый определяет, какие элементы из первой итерации удаляются.Любой элемент 'True' позволит сжатию удалить элемент из первой итерации

    Screenshot from the Itertools Docs

0 голосов
/ 22 октября 2018

Если я читаю, что вы хотите сделать правильно, такая функция может сработать.

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
...