【发布时间】:2014-01-20 14:13:07
【问题描述】:
我有一个具有以下排列的列表:N 子列表的数量和 N_i 每个子列表中的子列表数量,其中 N_i 在整个子列表中不一定相等.每个子子列表包含两个元素(对于所有子子列表都是如此)。这是具有 3 个子列表和 4、3、5 和 1 个子子列表的此类列表的简短版本:
a = [[[0.3, 1.2], [0.3, 2.3], [0.3, 4.6], [0.3, 3.4]], [[0.6, 4.5], [0.6, 2.5], [0.6, 7.8]], [[0.2, 1.4], [0.2, 6.3], [0.2, 5.2], [0.2, 2.1], [0.2, 3.6]], [[0.4, 1.3]]]
我需要一种方法来从所有可用的子列表中选择一个随机子列表并存储指向它的索引。
我可以使用random.choice 并这样做:
import random.choice as r_c
s_s_list = r_c(r_c(a))
print s_s_list
[0.6, 7.8]
这有效地从所有可用的子列表中返回一个随机子列表,但它有以下问题:
a- 它没有给我指向它的i,j 索引(在这种情况下:[1, 2]),我不能直接使用a.index(s_s_list),因为它是一个 sub-sub-列出和
b- 因为我需要重复这个过程M 次来获得M 随机 distinct 子子列表(以及指向它们的索引),所以这不起作用。
c- 正如 cmets 中所指出的那样,这使得被选择到具有较少元素的子列表中的那些子子列表的概率更高,我需要以相同的概率选择每个子子列表.
【问题讨论】:
-
你为什么不使用
random.choice与enumerate结合? -
你事先知道每个子列表的大小吗?
-
既然我们正在修复您的问题表述:所有子列表是否应该具有相同的被选择概率,或者您应该首先在列表中平等选择?例如,在
[ range(10, 1000), range(1, 2) ]的第二种情况下,您有 50% 的机会选择2。 -
请再次查看我更新的问题,您和 arshajii 指出这一点是正确的。