2016-06-23 10 views
2

私は(非常に)初心者のプログラマーです。特にPythonで初めてです。指定されたドメインと範囲ですべての注入関数を生成する方法は?

私は指定されたドメインと特定の範囲をとり、注入マップを生成したいと考えています。たとえば、ドメインをA = [1、2]、範囲をB = [1、3]とすると、出力が "(1 - > 1、2 - > 3) (1→3,2→1)」となる。 ((1,1)、(2,3))や((1,3)、(2,1))のようなものは問題ありません。別の例として、A = [2,3]とB = [1,2]を取ることができ、 "(2→1,3→2)、(2→2,3) - > 1)」と表示されます。

私の最高の試みは、[(1,1)、(1,3)、(2,1)、(2,3)]リストを生成

A = [1, 2] 
B = [1, 3] 
C = [] 
for x in A: 
    for y in B: 
     C.append((x, y)) 

あります。私はそれがなぜそれを生み出すのか理解していますが、実際に私が望むものを実際に作り出す方法は考えられません。

私は等のループ、リスト、セット、のように、基本的なPythonツールを使用してソリューションを好むだろう

答えて

3

PERMUTE二つのリストの1(from itertools import permutations)、および順列のそれぞれには、1対1の操作を行い マッピング(zip(..))。

>>> from itertools import permutations 
>>> a = [1,2,3] 
>>> b = [4,5,6] 
>>> [zip(a, x) for x in permutations(b)] 
[[(1, 4), (2, 5), (3, 6)], [(1, 4), (2, 6), (3, 5)], [(1, 5), (2, 4), (3, 6)], [(1, 5), (2, 6), (3, 4)], [(1, 6), (2, 4), (3, 5)], [(1, 6), (2, 5), (3, 4)]] 

あなたの例のためにそれを実行:

>>> a = [1,2] 
>>> b = [1,3] 
>>> [zip(a, x) for x in permutations(b)] 
[[(1, 1), (2, 3)], [(1, 3), (2, 1)]] 
関連する問題