【发布时间】:2011-06-18 09:46:57
【问题描述】:
我需要来自range(n) 的所有可能的数字元组中的一个样本,无需替换。也就是说,我有一个集合 (0,0), (0,1), ..., (0,n), (1,0), (1,1), ..., (1,n ), ..., (n,0), (n,1), (n,n),我正在尝试获取这些元素中的 k 个样本。我希望避免明确构建此集合。
如果我需要来自数字序列而不是数字元组的样本,我知道random.sample(range(n), k) 既简单又高效。
当然,我可以显式构建包含所有可能的 (n * n = n^2) 元组的列表,然后调用 random.sample。但如果k 比n^2 小得多,那可能效率不高。
我不确定 Python 2 和 3 的效率是否相同;我使用 Python 3。
【问题讨论】:
-
元组是序列,因此您的句子“需要来自数字序列而不是数字元组的样本”。没有意义。你的意思是你需要一个来自元组序列的样本?在这种情况下还不清楚这些元组的外观。
-
您的代码(
random.sample(range(n), k)适用于所有序列、元组、列表、字符串和collections.Sequence的任何子类。您尝试过您的代码了吗?问题是什么? -
@Regebro: '来自元组的样本' = '从 n 个元组序列中的 k 个元组的样本'。 '来自序列的样本' = '来自 n 个元素的序列中的 k 个元素的样本'。我将编辑问题以澄清。 @S.Lott:我的意思是我不能引用序列 ((0,0), (0,1), (0,2), (1,0), (1,1), ( 1,2), (2,0), (2,1), (2,2)) 作为一个简单的
range我可以简单地应用sample。
标签: python algorithm random python-3.x