Verschachteln Sie 2 Arrays in Python nach dem Zufallsprinzip

Angenommen, ich habe zwei Arrays:

a = [1, 2, 3, 4]
b = [5, 6, 7, 8, 9]

Ich möchte diese beiden Arrays in eine Variable 'c' verschachteln (Note 'a' und 'b' sind nicht unbedingt gleich lang), aber ich möchte nicht, dass sie deterministisch verschachtelt werden. Kurz gesagt, es reicht nicht aus, nur diese beiden Arrays zu komprimieren. Ich will nicht

c = [1, 5, 2, 6, 3, 7, 4, 8, 9]

Stattdessen möchte ich etwas Zufälliges wie:

c = [5, 6, 1, 7, 2, 3, 8, 4, 9]

Beachten Sie auch, dass die Reihenfolge von 'a' und 'b' im resultierenden Array 'c' erhalten bleibt.

Die aktuelle Lösung, die ich habe, erfordert eine for-Schleife und eine Zufallsgenerierung. Es gefällt mir nicht und ich hoffe, dass mich jemand auf eine bessere Lösung hinweisen kann.

# resulting array
c = []

# this tells us the ratio of elements to place in c. if there are more elements 
# in 'a' this ratio will be larger and as we iterate over elements, we will place
# more elements from 'a' into 'c'.
ratio = float(len(a)) / float(len(a) + len(b))

while a and b:
    which_list = random.random()
    if which_list < ratio:
        c.append(a.pop(0))
    else:
        c.append(b.pop(0))

# tack on any extra elements to the end
if a:
    c += a
elif b:
    c += b

Antworten auf die Frage(15)

Ihre Antwort auf die Frage