gpt4 book ai didi

python - 从列表中返回随机子子列表及其索引

转载 作者:太空宇宙 更新时间:2023-11-04 10:39:57 24 4
gpt4 key购买 nike

我有一个列表,排列如下: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-list

b- 因为我需要重复此过程 M 次以获得 M 随机 distinct 子子列表(以及索引指向他们)这是行不通的。

c- 正如在评论中指出的那样,这使得被挑选到元素较少的子列表中的那些子子列表的概率更高,我需要以相同的概率挑选每个子子列表.

最佳答案

要跟踪索引,您可以 (a) 随机选择索引,并使用它们来检索子列表;或者 (b) 使用 enumerate 将索引放入您的列表。

由于您想要不放回地抽样(即 M distinct sub-sub-lists),请使用 random.sample 而不是 M 调用 random.choice。要以相等的概率在子列表中进行选择,您必须首先“展平”列表。在添加索引的同时很容易做到这一点。

下面是如何使用 enumerate 来做到这一点:

a_flat = [(i, j, item) for i, sublst in enumerate(a) for j, item in enumerate(sublst)]
choices = random.sample(a_flat, 3)

for c in choices:
print c

(2, 3, [0.2, 2.1])
(3, 0, [0.4, 1.3])
(1, 0, [0.6, 4.5])

关于python - 从列表中返回随机子子列表及其索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21236219/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com