Help with this code
Peter Otten
__peter__ at web.de
Mon Jan 9 10:59:17 EST 2017
José Manuel Suárez Sierra wrote:
> This is the traceback:
> line 18, in <module>
> for transf2[j] in transf2:
> IndexError: list assignment index out of range
>
> If I have initialized j=0 (such as i) why does it not work?
A for loop
for x in y:
...
sequentually assigns every value in y to x. So with y = "ab" it executes
x = "a"
...
x = "b"
...
This is the case even when there is something more complex like transf2[j]:
for transf2[j] in y:
...
translates to
transf2[j] = "a"
... # both transf2 and j may be rebound here and thus affect
transf2[j] = "b" # what this actually does
...
and thus can fail with an IndexError when j is bound to a value greater than
the length of the transf2 list.
But most likely you want to avoid this feature of Python -- even the experts
never use it.
> I want the script to read sequence 1 and compares every element inside it
> with elements in sequence 2 no mattering where it matches.
That may be sufficient to explain the objective to a human who already has a
rough idea of your goal, but to come up with an actual algorithm you need to
think about -- and communicate -- a lot more detail.
There is a third party module that operates on strings, not lists which
finds the edit operations
>>> Levenshtein.editops("abcdefgj", "axcdyezfg")
[('replace', 1, 1), ('insert', 4, 4), ('insert', 5, 6), ('delete', 7, 9)]
What should your function return given the equivalent lists
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'j']
['a', 'x', 'c', 'd', 'y', 'e', 'z', 'f', 'g']
? Try to make your plain-english description as precise as possible before
you start coding.
More information about the Python-list
mailing list