Вы говорите:
Конечно, я могу явно построить
список, содержащий все возможные (n * n =
п ^ 2) кортежи, а затем вызвать
случайный пример. Но это, вероятно,
не эффективен, если к намного меньше
чем п ^ 2.
Ну, а как насчет создания кортежа после , который вы случайно выбрали? То есть, если вы можете построить наборы до того, как вы случайным образом выберете, какой из них выбрать, вы можете сначала выполнить сбор, а затем построить.
Я не понимаю, как должны выглядеть ваши кортежи, но вот пример, хотя я понимаю, что ваши кортежи одинаковой длины, это показывает принцип:
Вместо этого:
>>> import random
>>> all_sequences = [range(x) for x in range(10)]
>>> all_sequences
[[], [0], [0, 1], [0, 1, 2], [0, 1, 2, 3], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4, 5], [0, 1, 2, 3, 4, 5, 6], [0, 1, 2, 3, 4, 5, 6, 7], [0, 1, 2, 3, 4, 5, 6, 7, 8]]
>>> random.sample(all_sequences, 3)
[[0, 1, 2, 3, 4, 5, 6, 7], [0, 1, 2, 3, 4, 5], [0, 1, 2, 3, 4, 5, 6, 7, 8]]
Вы бы сделали это:
>>> import random
>>> selection = random.sample(range(10), 3)
>>> [range(x) for a in selection]
[[0, 1, 2, 3, 4, 5, 6, 7, 8], [0, 1, 2, 3, 4, 5, 6, 7, 8], [0, 1, 2, 3, 4, 5, 6, 7, 8]]