crispy wrote: > Thanks, i've finally came to solution. > > Here it is -> http://codepad.org/Q70eGkO8 > > def pairwiseScore(seqA, seqB): > > score = 0 > bars = [str(' ') for x in seqA] # ... > length = len(seqA) > similarity = [] > > for x in xrange(length): > > if seqA[x] == seqB[x]: # ... > if (x >= 1) and (seqA[x - 1] == seqB[x - 1]): # ... > score += 3 > similarity.append(x) > else: > score += 1 > similarity.append(x) > else: > score -= 1 > > for x in similarity: > bars[x] = '|' # ... > > return ''.join((seqA, '\n', ''.join(bars), '\n', seqB, '\n', 'Score: ', str(score))) >
Python has a function zip() that lets you iterate over multiple sequences simultaneously. Instead of for i in xrange(len(a)): x = a[i] y = b[i] ... you can write for x, y in zip(a, b): ... Also, you can build the bar list immediately and avoid the similarity list. With these changes: def pairwise_score(a, b): score = 0 was_equal = False bars = [] for x, y in zip(a, b): equal = x == y if equal: bars.append("|") if was_equal: score += 3 else: score += 1 else: bars.append(" ") score -= 1 was_equal = equal print a print "".join(bars) print b print "Score:", score If you want to take this even further you can use a score matrix instead of if ... else: def pairwise_score(a, b): score = 0 was_equal = False bars = [] matrix = [[-1, 1], [-1, 3]] for x, y in zip(a, b): equal = x == y score += matrix[was_equal][equal] bars.append(" |"[equal]) was_equal = equal print a print "".join(bars) print b print "Score:", score -- http://mail.python.org/mailman/listinfo/python-list