从一个列表中随机选择X个列表。

3
我有类似以下的东西:
pen = [1, 2, 3, 4]
pencil = [2,3,4,5]
paper = [3,4,5,6]
group_of_items = [pen, pencil, paper]

我希望从这个列表中随机选择特定数量的列表,使结果类似于这样:

[pencil, pen]

我从另一个问题中找到了以下内容(根据我的情况进行了修改)。
import random

pen = [1, 2, 3, 4]
pencil = [2,3,4,5]
paper = [3,4,5,6]

group_of_items = [pen, pencil, paper]

num_to_select = 2
list_of_random_items = random.sample(group_of_items, num_to_select)
print(list_of_random_items)

它会产生类似这样的结果。
[[2, 3, 4, 5], [1, 2, 3, 4]]

因此,有点接近但还不够。我也找到了这个。
import numpy as np

pen = [1, 2, 3, 4]
pencil = [2,3,4,5]
paper = [3,4,5,6]
group_of_items = [pen, pencil, paper]
num_to_select = 2

random_list = np.random.choice(group_of_items, num_to_select, replace=False)

print(random_list)

但是它不能处理列表的列表(多维)。
如何实现我的目标?
哦,我不想要任何重复。
注意:我的编程经验相当有限。我大多数时候只是复制和粘贴我在网上找到的东西,只做小的改变。
编辑:以上只是一个快速拼凑的测试。我构建了一个使用PythonAnywhere的Twitter推文机器人。它正常运行,但我想为其添加更多随机功能。
我有一些推文列表存储在Google电子表格中,然后把它们导入到Python列表中,如下所示:
quotes = tweet_sheet.col_values(3)

我有几个像这样的列表,将它们组合成一个主列表。但是我不想每次运行程序时都从每个列表进行发布推文。
现在我使用类似于这样的东西。
sources = [tips,feed,quotes... etc...

我希望在程序运行时从列表的主列表中选择x个列表来使用。 (这种措辞有点奇怪)
从迄今为止的评论中,我猜我上面的内容会起作用。稍微调整一下其余的代码就可以了。

1
那个结果为什么不是你想要的?列表不会打印变量名。 - juanpa.arrivillaga
1
除非您在字符串级别处理数据,否则您将无法做到这一点。 - Jean-François Fabre
2
@MarkLee 这听起来像是一个XY问题。也许你应该告诉我们你实际想要做什么,因为可能有更好的方法来完成它。 - Chris Mueller
1
保持一个字符串到列表的dict,然后从这些字符串的列表中随机选择,就像你之前做的那样,然后将该dict用作从字符串到列表的映射。 - juanpa.arrivillaga
1
但是马克,你正在从列表中选择一个随机样本。你的例子怎么会“接近但不完美”呢?Python列表不会记住用于构建它的变量的名称。 - juanpa.arrivillaga
显示剩余5条评论
2个回答

2

以下是使用字典的一种方法:

>>> pen = [1, 2, 3, 4]
>>> pencil = [2,3,4,5]
>>> paper = [3,4,5,6]
>>> item_dict = {'pen':pen, 'pencil':pencil, 'paper':paper}
>>> import random
>>> item_names = list(item_dict.keys())
>>> item_names
['pencil', 'pen', 'paper']
>>> sample = random.sample(item_names,2)
>>> sample
['pencil', 'pen']
>>> item_dict[sample[0]]
[2, 3, 4, 5]
>>> item_dict[sample[1]]
[1, 2, 3, 4]

现在您已经建立了 字符串列表 之间的关联:

>>> "The first list sampled was {}. Here's the list {}".format(sample[0], item_dict[sample[0]])
"The first list sampled was pencil. Here's the list [2, 3, 4, 5]"
>>> 

非常好。从评论中我认为我不需要这种特定的级别,但这是一个漂亮干净的例子,可能会帮助未来的某个人。感谢您的整理。 - Mark Lee

0
如果你确定要返回一个随机选择的列表列表,你可以使用Python本地的random.choices()函数。
import random
pen = [1, 2, 3, 4]
pencil = [2,3,4,5]
paper = [3,4,5,6]
group_of_items = [pen, pencil, paper]
print(group_of_items)

sampling = random.choices(group_of_items, k=2)
print("sampling with choices() ", sampling)

输出:

[[1, 2, 3, 4], [2, 3, 4, 5], [3, 4, 5, 6]]
sampling with choices()  [[2, 3, 4, 5], [1, 2, 3, 4]]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接