Перемешайте оба массива, затем берите элементы по мере необходимости, один за другим. Или попробуйте их, если вы не хотите, чтобы оригиналы возмущались:
Q=("but","why","okay")
J=("J1","J2","J3","J4","J5")
S=[(J,), (J,Q,J), (J,Q,J,Q,J), (J,Q,J,Q,J,Q,J)]
from random import sample, choice
from collections import Counter
seq = choice(S)
iters = { s: iter(sample(s, c)) for s, c in Counter(seq).items() }
result = ' '.join(next(iters[s]) for s in seq)
Итак, сначала я выбираю нужную последовательность. Затем я подсчитываю, сколько раз каждый список появляется в выбранной последовательности. Затем для каждого уникального списка я беру столько случайных элементов (без повторений), сколько есть списков в последовательности, затем создаю итератор для этих вариантов, чтобы я мог получить их один за другим. Последнее, что осталось сделать, это перебрать последовательность и взять следующий элемент из соответствующего итератора.