Предположим, что у меня есть два массива:
a = [1, 2, 3, 4]
b = [5, 6, 7, 8, 9]
Я хочу переместить эти два массива в переменную 'c' (примечание 'a' и 'b' не обязательно одинаковой длины), но я не хочу, чтобы они чередовали детерминированный путь. Короче говоря, этого недостаточно, чтобы просто закрепить эти два массива. Я не хочу:
c = [1, 5, 2, 6, 3, 7, 4, 8, 9]
Вместо этого мне нужно что-то случайное, например:
c = [5, 6, 1, 7, 2, 3, 8, 4, 9]
Также обратите внимание, что порядок "a" и "b" сохраняется в результирующем массиве "c".
В текущем решении у меня требуется цикл for и генерация случайных чисел. Мне это не нравится, и я надеюсь, что кто-то может указать мне на лучшее решение.
# 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