py itertools?

Chris Rebert clp2 at rebertia.com
Sat Dec 19 07:48:22 EST 2009


On Sat, Dec 19, 2009 at 2:54 AM, mattia <gervaz at gmail.com> wrote:
> Hi all, I need to create the permutation of two strings but without
> repeat the values, e.g. 'ab' for me is equal to 'ba'. Here is my
> solution, but maybe the python library provides something better:
>
>>>> def mcd(a, b):
> ...     if b == 0:
> ...         return a
> ...     else:
> ...         return mcd(b, a % b)
> ...
>>>> def mcm(a, b):
> ...     return int((a * b) / mcd(a, b))
> ...
>>>> s1 = 'abc'
>>>> s2 = 'wt'
>>>> m = mcm(len(s1), len(s2))
>>>> set(zip(s1*m, s2*m))
> {('a', 'w'), ('a', 't'), ('b', 'w'), ('c', 't'), ('b', 't'), ('c', 'w')}
>
> Any help?

Surprised you didn't think of the seemingly obvious approach:

def permute_chars(one, two):
    for left in set(one):
        for right in set(two):
            yield (left, right)

>>> list(permute_chars('abc', 'wt'))
[('a', 'w'), ('a', 't'), ('b', 'w'), ('b', 't'), ('c', 'w'), ('c', 't')]

Cheers,
Chris
--
http://blog.rebertia.com



More information about the Python-list mailing list