Create a random order of (x, y) pairs, without repeating/subsequent x's

后端 未结 9 2273
陌清茗
陌清茗 2021-02-08 12:25

Say I have a list of valid X = [1, 2, 3, 4, 5] and a list of valid Y = [1, 2, 3, 4, 5].

I need to generate all combinations of every element in

9条回答
  •  予麋鹿
    予麋鹿 (楼主)
    2021-02-08 13:02

    This should do what you want.

    rando will never generate the same X twice in a row, but I realized that it is possible (though seems unlikely, in that I never noticed it happen in the 10 or so times I ran without the extra check) that due to the potential discard of duplicate pairs it could happen upon a previous X. Oh! But I think I figured it out... will update my answer in a moment.

    import random
    
    X = [1,2,3,4,5]
    Y = [1,2,3,4,5]
    
    
    def rando(choice_one, choice_two):
        last_x = random.choice(choice_one)
        while True:
            yield last_x, random.choice(choice_two)
            possible_x = choice_one[:]
            possible_x.remove(last_x)
            last_x = random.choice(possible_x)
    
    
    all_pairs = set(itertools.product(X, Y))
    result = []
    r = rando(X, Y)
    while set(result) != all_pairs:
        pair = next(r)
        if pair not in result:
            if result and result[-1][0] == pair[0]:
                continue
            result.append(pair)
    
    import pprint
    pprint.pprint(result)
    

提交回复
热议问题