No built-in swap function?

Andrew Koenig ark at
Mon Mar 29 19:54:37 CEST 2004

"John J. Lee" <jjl at> wrote in message
news:ad1zeebc.fsf at

> It seems an odd question in one way: Saying that it evaluates v[i] and
> v[j] twice may be true, but ignores the fact that v[a] is quite
> different from v[a] = b -- one does a lookup (whether it be a dict
> lookup, list indexing operation, or whatever), and the other is an
> assignment (whether setting a dict key/val pair, setting a list item,
> etc).

Of course.  Nevertheless there are some operations in common, especially if
you're trying to do something like

    v[i], v[i+j] = v[i+j], v[i]

> I admit I don't like the repetition of v[i] and v[j], though of course
> that can be solved by writing a function.  I suppose a function is
> best here, not a method, because you might want to apply it to any
> sequence.

Perhaps.  Obviously, I can write

    def swap(v, i, j):
        v[i], v[j] = v[j], v[i]

and then my example above becomes

    swap(v, i, i+j)

However, if swap were a builtin, I think I'd expect it to be a method
because that way, it would be easier for the function to depend on the type
of v.

Anyway, it's no big deal; I just want to be sure I wasn't missing something
that's already there.

More information about the Python-list mailing list