Как оптимизировать сравнение строк в базе c python, которая использует +1 итерацию? - PullRequest
0 голосов
/ 09 марта 2020

У меня есть следующие две строки, которые имеют свои собственные начальные координаты

string1='CADBDCXDCAXDDDAADXDADCC'
string2='AABCXXABACBBBDDXDCAAXB'
coordinate1=42
coordinate2=180

Итак, string1 начинается с 42, а string2 начинается с 180. Эти строки состоят только из A , B, C, D и X.

Чтобы найти конечные координаты между этими строками, нам нужно пропустить символы X. Вот моя реализация, которая является для l oop через каждый символ, итерация на 1, если символ не X.

def convert_coordinates(first_str, second_str, index1, index2):
    x = index1
    y = index2
    for char1, char2 in zip(first_str, second_str):
        if char1!='X':
            x+=1
        if char2!='X':
            y+=1
    return [x, y]

, который при запуске выдает следующее:

convert_coordinates(string1, string2, coordinate1, coordinate2)
[61, 198]

Моя проблема заключается в том, что итерация таким образом выглядит как старый C код, и я реализую это в Python. Поэтому я подозреваю, что это очень медленно по сравнению с другими структурами данных. Можно ли как-то оптимизировать это, возможно, используя NumPy, может быть? Я хотел бы уйти от базовых c python структур ....

1 Ответ

0 голосов
/ 09 марта 2020

Вместо того, чтобы считать вручную, вы можете использовать выражение генератора и встроенное sum(), то есть:

>>> sum(1 for c in string1 if c != "X")
20

Обратите внимание, что вы используете zip в своем пример означает, что более длинная первая строка обрезается по длине более короткой, поэтому получается другой результат (в вашем примере кода последний символ первой строки никогда не учитывается). Если это не ошибка, вы можете просто обрезать строки как минимум до двух длин.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...