Symboli c манипуляции внутри строки - PullRequest
2 голосов
/ 02 февраля 2020

Я создаю список строк, которые представляют собой смесь x, y и других символов, где символы x и y, если они вообще появляются, будут появляться в последовательных кластерах, поэтому строка может выглядеть так:

yy...x...xxyyxxx...xy...

с ..., представляющим некоторую произвольную строку других символов.

Используя SymPy и объявляя x и y как символы алгебры c, есть ли способ преобразовать приведенную выше строку в?

y^2...x...x^2y^2x^3...xy...

То есть заставить его сканировать строку и интерпретировать любую непрерывную последовательность n x или y как x^n, оставляя остальную часть строки без изменений?

1 Ответ

3 голосов
/ 02 февраля 2020

Кажется, это просто проблема манипуляции со строками, поэтому sympy кажется излишним. Вот решение, использующее itertools.groupby, которое можно использовать для группировки соседних элементов из последовательности, равной:

from itertools import groupby

def transform_xy(string):
    def helper(s, seq):
        if s in ('x', 'y'):
            n = sum(1 for _ in seq) # can't use len(...) on an iterator
            return s if n == 1 else '{}^{}'.format(s, n)
        else:
            return ''.join(seq)
    return ''.join(helper(s, seq) for s, seq in groupby(string))

Пример:

>>> transform_xy('xxxyyxyxaaabbyyyyxxxyyaaxyyyxy')
'x^3y^2xyxaaabby^4x^3y^2aaxy^3xy'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...