Сравнение различий строк со списком строк - PullRequest
1 голос
/ 19 декабря 2011

У меня есть метод, который вычисляет количество различий в двух строках и выводит, где различия.

def method(a):
    count=0
    s1="ABC"
    for i in range (len(a)):
        if not a[i]==s1[i]:
            count=count+1
        else:
            count=count+0
    return a,count,difference(a, s1)

На входе без CBB этот метод выводит

('CBB', 2, [1, 0, 1])

Что мне действительно нужно, чтобы этот метод делал то же самое, но где сравнивается не только одна строка в s1, но и список строк

s1 = ['ACB', 'ABC', 'ABB']

Кто-нибудь с умным способом сделать это?

Ответы [ 2 ]

2 голосов
/ 19 декабря 2011

Хорошо, после разъяснения, вместо жесткого кодирования s1, заставьте ваш метод принять его в качестве аргумента:

def method(a, s1):
    count=0
    for i in range (len(a)):
        if not a[i]==s1[i]:
            count=count+1
        else:
            count=count+0
    return a,count,difference(a, s1)

Затем воспользуйтесь списком:

 result = [method(a, s1) for s1 in list]

Будьте осторожны, так как ваш метод потерпит неудачу, если a длиннее s1. Поскольку вы действительно не говорите, каким должен быть результат в этом случае, я оставил все как есть.

1 голос
/ 19 декабря 2011

функция compare вычисляет количество различий (и карту различий, которые вы создали с помощью difference()).Я переписал функцию сравнения, чтобы взять базовую строку для сравнения src, чтобы вы не застряли при сравнении с "ABC" все время.

def compare(src, test):
    if len(src) != len(test):
        return # must be the same length
    diffmap = [0]*len(src)
    count = 0
    for i, c in enumerate(src):
        if not c == test[i]:
            count = count+1
            diffmap[i] = 1
    return test, count, diffmap

compare_to_manyФункция просто просматривает список строк для сравнения, srcs, и создает список сравнений между этими базовыми строками и тестовой строкой test.

def compare_to_many(srcs, test):
    return map(lambda x: compare(x, test), srcs)

РЕДАКТИРОВАТЬ:

После уточнения в комментариях @ X-Pender необходимо жестко закодировать список источников.Это может быть отражено следующей единственной функцией:

def compare(test):
    def compare_one(src, test):
        diffmap = [0]*len(src)
        count = 0
        for i, c in enumerate(src):
        if not c == test[i]:
            count = count+1
            diffmap[i] = 1
        return test, count, diffmap
    sources = ["ABC", "CDB", "EUA"] # this is your hardcoded list
    return map(lambda x: compare_one(x, test), sources)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...