31981


list1=["a1", "a2", "a3", "a4", "a5", "a6", "a7", "a8", "a9", "a10"]  
list2=["b1", "b2", "b3", "b4", "b5", "b6", "b7", "b8", "b9", "b10"]  
という2つのリストがあります。

基本的に「[リストの要素をランダムに組み合わせて表示する](https://ja.stackoverflow.com/questions/31403/%E3%83%AA%E3%82%B9%E3%83%88%E3%81%AE%E8%A6%81%E7%B4%A0%E3%82%92%E3%83%A9%E3%83%B3%E3%83%80%E3%83%A0%E3%81%AB%E7%B5%84%E3%81%BF%E5%90%88%E3%82%8F%E3%81%9B%E3%81%A6%E8%A1%A8%E7%A4%BA%E3%81%99%E3%82%8B/31405#31405)」のように、list1とlist2の要素を一つずつランダムで重複なくペアにして(a1,
b2)、(a4, b5)、(b3, a10)、のように表示しようとしています。 ペアの要素[0]と[1
]にlist1とlist2の要素がそれぞれちょうど半分ずつ格納されるようにします。

この際、最初に何らかの指定 (例えば「1」を入力する) をすると、list1のa1からa5は必ず最終的なペアの要素[0]に、a6 からa10はペアの要素[1
]に格納され、「2」を入力するとlist1のa6からa10は必ず最終的なペアの要素[0]に、a1からa5はペアの要素[1
]に格納、という条件をつけたいのです。(「1」が入力された場合、list２も同様にb1からb5が要素[0]に…と処理は同様です。)

初歩的な質問かもしれませんが、よろしくお願いします。


CC BY-SA 3.0
2017-01-17T20:09:17.910
31924
2017-01-19T09:57:11.580
2017-04-13T12:52:38.920
-1
7677
question
python
リストから取り出す要素範囲を指定してランダムに組み合わせる


以下にコード例を示します。

[code]

    import random
    
    def func(list1, list2, flag):
        l1 = list(list1)
        l2 = list(list2)
        random.shuffle(l2)
    
        pairs = []
        TO = 5
        if flag == 1:
            pairs += zip(l1[:TO], l2[:TO])
            pairs += zip(l2[TO:], l1[TO:])
        elif flag == 2:
            pairs += zip(l2[:TO], l1[:TO])
            pairs += zip(l1[TO:], l2[TO:])
    
        random.shuffle(pairs)
        return pairs
    
    
    list1=["a1", "a2", "a3", "a4", "a5", "a6", "a7", "a8", "a9", "a10"]
    list2=["b1", "b2", "b3", "b4", "b5", "b6", "b7", "b8", "b9", "b10"]
    print(func(list1, list2, 1))
    print(func(list1, list2, 2))
    
[/code]

以下に実行例を示します。

[code]

    [('b4', 'a7'), ('a2', 'b1'), ('a5', 'b9'), ('b7', 'a6'), ('b8', 'a9'), ('b10', 'a10'), ('a1', 'b2'), ('b5', 'a8'), ('a3', 'b6'), ('a4', 'b3')]
    [('a9', 'b9'), ('a10', 'b4'), ('b3', 'a1'), ('b10', 'a5'), ('a8', 'b5'), ('b7', 'a2'), ('a7', 'b1'), ('b6', 'a4'), ('a6', 'b8'), ('b2', 'a3')]
    
[/code]

random.shuffle()は、リストをランダムに並び替える関数です。  
flagの値により、ペアリングの方法を切り替えています。


CC BY-SA 3.0
2017-01-19T09:51:03.607
31981
2017-01-19T09:57:11.580
2017-01-19T09:57:11.580
20296
20296
31924
answer