Поиск по сайту:

Программа Python для получения всех возможных фрагментов строки за K количество фрагментов


В этой статье пользователь поймет, как получить все возможные фрагменты строки за количество K фрагментов в программе Python. В этой статье изображены два разных примера. Мы будем использовать итерационный подход для достижения желаемого результата. Во втором примере мы будем использовать подход itertools.combinations для получения нарезанной строки.

Давайте возьмем пример, чтобы продемонстрировать вычисления. Следующие примеры приведены для понимания, и мы рассмотрим процесс вычислений один за другим.

Пример 1. Поиск всех возможных фрагментов строки для числа K фрагментов с использованием итерационного подхода.

Алгоритм

Шаг 1. Откройте Jupyter Notebook в командной строке Anaconda и начните писать код в его ячейке.

Шаг 2: Используйте функцию 'get_all_slices', она принимает входную строку (строку) и количество срезов '(k)'. Он инициализирует пустой список slices [[ ]] для хранения результатов.

Шаг 3: Функция проверяет, k> длина строки (n).

Шаг 4: для i в диапазоне (k): решение на основе итераций для генерации всех возможных фрагментов строки.

Шаг 5: range(k) генерирует последовательность чисел от 0 до k-1.

Шаг 6: new_slices=[]: инициализируйте пустой список с именем new_slices на каждой итерации внешнего цикла. Это сохранит вновь сгенерированные фрагменты для текущей итерации.

Шаг 7: для среза_списка в срезах: это вложенный цикл, в котором он перебирает существующие срезы из предыдущей итерации.

Шаг 8: Оставшаяся_длина=len(строка) - сумма(карта(len, срез_список)): Вычисляет оставшуюся длину строки после взятия длин существующих фрагментов.

Шаг 9: Использует map(len, срез_список) для получения списка длин отдельных фрагментов и получения их суммы.

Шаг 10: Получите оставшуюся длину, вычитая эту сумму из общей длины строки.

Шаг 11: для j в диапазоне (1, rest_length + 1): будут сгенерированы все возможные длины (j) для нового фрагмента. Он начнется с 1 и достигнет remaining_length.

Шаг 12: new_slices.append(slice_list + [string[:j]]): добавьте новый фрагмент в список new_slices. Он объединит текущий список фрагментов (slice_list) с новым фрагментом, созданным путем разрезания строки от 0 до j.

Шаг 13:slices=new_slices: после создания всех срезов для текущей итерации переменная слайсов обновляется с помощью списка new_slices. Это позволит следующей итерации основываться на новых срезах.

Шаг 14: Наконец, окончательный список фрагментов будет содержать все фрагменты строки для заданного количества фрагментов (k).

Шаг 15: В результате функция возвращает список фрагментов.

Код для нарезанной строки

Пример

def get_all_slices_iteration(string, k):
    slices = [[]]
    for i in range(k):
        new_slices = []
        for slice_list in slices:
            remaining_length = len(string) - sum(map(len, slice_list))
            for j in range(1, remaining_length + 1):
                new_slices.append(slice_list + [string[:j]])
        slices = new_slices
    
    return slices

# Example 
input_string = "welcome"
num_slices = 3
result = get_all_slices_iteration(input_string, num_slices)
# Print the result
for slice_list in result:
    print(slice_list)

Просмотр результата — пример 1

Этот подход будет итеративно создавать срезы, расширяя существующие срезы из предыдущей итерации. Он может вычислить оставшуюся длину строки и будет генерировать все возможные длины нового среза на каждой итерации, постепенно создавая все ожидаемые срезы.

Выход

['w', 'w', 'w']
['w', 'w', 'we']
['w', 'w', 'wel']
['w', 'w', 'welc']
['w', 'w', 'welco']
['w', 'we', 'w']
['w', 'we', 'we']
['w', 'we', 'wel']
['w', 'we', 'welc']
['w', 'wel', 'w']
['w', 'wel', 'we']
['w', 'wel', 'wel']
['w', 'welc', 'w']
['w', 'welc', 'we']
['w', 'welco', 'w']
['we', 'w', 'w']
['we', 'w', 'we']
['we', 'w', 'wel']
['we', 'w', 'welc']
['we', 'we', 'w']
['we', 'we', 'we']
['we', 'we', 'wel']
['we', 'wel', 'w']
['we', 'wel', 'we']
['we', 'welc', 'w']
['wel', 'w', 'w']
['wel', 'w', 'we']
['wel', 'w', 'wel']
['wel', 'we', 'w']
['wel', 'we', 'we']
['wel', 'wel', 'w']
['welc', 'w', 'w']
['welc', 'w', 'we']
['welc', 'we', 'w']
['welco', 'w', 'w']

Пример 2. Поиск всех возможных фрагментов строки для количества фрагментов K с использованием подхода «itertool.combinational».

Объяснение кода и этапы проектирования

Шаг 1. Откройте Jupyter Notebook в командной строке Anaconda и начните писать код в его ячейке.

Шаг 2: Используйте функцию 'get_all_slices', она принимает входную строку (строку) и количество срезов '(k)'. Он инициализирует пустой список slices[] для хранения результатов.

Шаг 3: Затем функция проверяет, k> длина строки (n). Если да, он возвращает пустой список срезов.

Шаг 4: Внешний цикл будет выполнять итерацию от 1 до k-1, что будет представлять количество символов в префиксе.

Шаг 5: Внутренний цикл будет выполнять итерацию от 1 до n-1, что будет представлять количество символов в суффиксе.

Шаг 6: Каждая комбинация длин префикса и суффикса суммируется с длиной строки (n).

Шаг 7: Извлеките префиксы и суффиксы из входной строки.

Шаг 8: Добавьте их в виде списка в список фрагментов.

Шаг 9: Используйте функцию itertools.combinations для создания всех комбинаций индексов от 1 до n-1.

Шаг 10: Переберите эти комбинации и создайте списки фрагментов, разделив строку на основе выбранных индексов.

Шаг 11. Соберите все конфигурации срезов в списке срезов и верните их как окончательный результат.

Код для itertool.combinational подхода

Пример

import itertools

def gt_combinations(string, k):
    slices = []
    for combo in itertools.combinations(range(1, len(string)), k - 1):
        indices = [0] + list(combo) + [len(string)]
        slice_list = [string[indices[i]:indices[i + 1]] for i in range(k)]
        slices.append(slice_list)
    
    return slices

# Example
ist = "welcome"
nt = 3
result = gt_combinations (ist, nt)

# Print the result
for slice_list in result:
    print(slice_list)

Просмотр результата — пример 2

Чтобы увидеть результат, откройте loactionfile.html в браузере. Теперь нажмите кнопку, чтобы найти текущее местоположение пользователя. Координаты отображаются на html-странице.

Выход

['w', 'e', 'lcome']
['w', 'el', 'come']
['w', 'elc', 'ome']
['w', 'elco', 'me']
['w', 'elcom', 'e']
['we', 'l', 'come']
['we', 'lc', 'ome']
['we', 'lco', 'me']
['we', 'lcom', 'e']
['wel', 'c', 'ome']
['wel', 'co', 'me']
['wel', 'com', 'e']
['welc', 'o', 'me']
['welc', 'om', 'e']
['welco', 'm', 'e']

В этой статье использование обоих подходов дает один и тот же результат, но способ реализации различен. Первый подход использует итерацию, второй подход использует функцию itertools.combinations, которая будет генерировать все комбинации индексов для разрезания строки. Мы можем выбрать любой подход, который соответствует нашим требованиям и предпочтениям.

Статьи по данной тематике: