从列表中进行互斥随机抽样

2023-12-07

input = ['beleriand','mordor','hithlum','eol','morgoth','melian','thingol']

我在创建 X 个大小为 Y 的列表而不重复任何元素时遇到问题。

我一直在做的是使用:

x = 3
y = 2

import random

output = random.sample(input, y)
# ['mordor', 'thingol']

但如果我重复这个,那么我就会重复。

我希望输出是这样的

[['mordor', 'thingol'], ['melian', 'hithlum'], ['beleriand', 'eol']]

自从我选择了x = 3(3 列表) 尺寸y = 2(每个列表 2 个元素)。

def random_generator(x,y):
    ....

您可以简单地打乱原始列表,然后生成n组的m元素依次来自它。可能存在比该数量更少或更多的组。注意input是Python内置函数的名称,所以我重命名了它words.

import itertools
from pprint import pprint
import random

def random_generator(seq, n, m):
    rand_seq = seq[:]  # make a copy to avoid changing input argument
    random.shuffle(rand_seq)
    lists = []
    limit = n-1
    for i,group in enumerate(itertools.izip(*([iter(rand_seq)]*m))):
        lists.append(group)
        if i == limit: break  # have enough
    return lists

words = ['beleriand', 'mordor', 'hithlum', 'eol', 'morgoth', 'melian', 'thingol']
pprint(random_generator(words, 3, 2))

Output:

[('mordor', 'hithlum'), ('thingol', 'melian'), ('morgoth', 'beleriand')]

迭代地生成组会更Pythonic。上面的函数可以很容易地变成生成器yield每个组都一一返回,而不是将它们全部返回到相对较长的列表中:

def random_generator_iterator(seq, n, m):
    rand_seq = seq[:]
    random.shuffle(rand_seq)
    limit = n-1
    for i,group in enumerate(itertools.izip(*([iter(rand_seq)]*m))):
        yield group
        if i == limit: break

pprint([group for group in random_generator_iterator(words, 3, 2)])
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从列表中进行互斥随机抽样 的相关文章

  • 如何将base64字符串直接解码为二进制音频格式

    音频文件通过 API 发送给我们 该文件是 Base64 编码的 PCM 格式 我需要将其转换为 PCM 然后再转换为 WAV 进行处理 我能够使用以下代码解码 gt 保存到 pcm gt 从 pcm 读取 gt 保存为 wav decod
  • 如何使用 pyinstaller 包含文件?

    我也使用 tkinter 使用 python 3 7 编写了一个程序 由于我使用的是外部图片 因此当我将所有内容编译为一个 exe 时 我需要包含它们 我试过做 add data bg png files 但我仍然收到此错误 tkinter
  • 切片稀疏(scipy)矩阵

    我将不胜感激任何帮助 以理解从 scipy sparse 包中切片 lil matrix A 时的以下行为 实际上 我想根据行和列的任意索引列表提取子矩阵 当我使用这两行代码时 x1 A list 1 x2 x1 list 2 一切都很好
  • JavaScript 相当于 Python 的参数化 string.format() 函数

    这是 Python 示例 gt gt gt Coordinates latitude longitude format latitude 37 24N longitude 115 81W Coordinates 37 24N 115 81W
  • Kivy - 文本换行工作错误

    我正在尝试在 Kivy 1 8 0 应用程序中换行文本 当没有太多文字时 一切正常 但如果文本很长并且窗口不是很大 它只是剪切文本 这是示例代码 vbox BoxLayout orientation vertical size hint y
  • Python在postgresql表中查找带有单引号符号的字符串

    我需要从 psql 表中查找包含多个单引号的字符串 我当前的解决方案是将单引号替换为双单引号 如下所示 sql query f SELECT exists SELECT 1 FROM table name WHERE my column m
  • 如何使用显式引用转储 YAML?

    递归引用非常适合ruamel yaml or pyyaml ruamel yaml dump ruamel yaml load A A id001 id001 然而 它 显然 不适用于普通引用 ruamel yaml dump ruamel
  • Tweepy StreamListener 到 CSV

    我是 python 新手 我正在尝试开发一个应用程序 使用 Tweepy 和 Streaming API 从 Twitter 检索数据并将数据转换为 CSV 文件 问题是此代码不会创建输出 CSV 文件 也许是因为我应该将代码设置为在实现例
  • numpy 使用 datetime64 进行数字化

    我似乎无法让 numpy digitize 与 datetime64 一起使用 date bins np array np datetime64 datetime datetime 2014 n 1 s for n in range 1 1
  • PySide6.1 与 matplotlib 3.4 不兼容

    当我只安装PySide6时 GUI程序运行良好 但是一旦我安装了matplotlib及其依赖包 包括pyqt5 则GUI程序将无法运行并输出以下错误消息 This application failed to start because no
  • 乘以行并按单元格值附加到数据框

    考虑以下数据框 df pd DataFrame X a b c d Y a b d e Z a b c d 1 2 1 3 df 我想在 列中附加数字大于 1 的行 并在该行中的数字减 1 df 最好应该 然后看起来像这样 或者它可能看起来
  • 具有屏蔽无效值的 pcolormesh

    我试图将一维数组绘制为 pcolormesh 因此颜色沿 x 轴变化 但每个 x 的 y 轴保持不变 但我的数据有一些错误值 因此我使用屏蔽数组和自定义颜色图 其中屏蔽值设置为蓝色 import numpy as np import mat
  • 使用 numpy 在 python 中执行最大方差旋转

    我正在研究矩阵的主成分分析 我已经找到了如下所示的组件矩阵 A np array 0 73465832 0 24819766 0 32045055 0 3728976 0 58628043 0 63433607 0 72617152 0 5
  • Python 类型安全吗?

    根据维基百科 https en wikipedia org wiki Type system Type safety and memory safety 如果一种语言不允许违反类型系统规则的操作或转换 计算机科学家就认为该语言是 类型安全的
  • 在 Sphinx 中,有没有办法在声明参数的同时记录参数?

    我更喜欢在声明参数的同一行记录每个参数 根据需要 以便应用D R Y http en wikipedia org wiki Don t repeat yourself 如果我有这样的代码 def foo flab nickers a ser
  • 无法在 python 3.8 上将带有 webapp 的 python 部署到 azure

    我正在尝试使用部署一个测试项目Flask使用以下方法将框架迁移到 Azure 云中Azure CLI https learn microsoft com en us azure app service containers quicksta
  • 在 virtualenvwrapper 中激活环境

    我安装了virtualenv and virtualenvwrapper用这个命令我创建了一个环境 mkvirtualenv cv 它有效 创建后我就处于新环境中 现在我重新启动了我的电脑 我想activate又是那个环境 但是怎么样 我使
  • 更改 Python Cmd 模块处理自动完成的方式

    我有一个 Cmd 控制台 设置为自动完成 Magic the Gathering 收藏管理系统的卡牌名称 它使用文本参数在数据库中查询卡片 并使用结果自动完成 建议卡片 然而 这些卡片名称有多个单词 Cmd 会从last到行尾的空间 例如
  • Python:高精度time.sleep

    你能告诉我如何在 Win32 和 Linux 上的 Python 2 6 中获得高精度睡眠函数吗 您可以在中使用浮点数sleep http docs python org library time html time sleep 该参数可以
  • 如何在单元测试中使用 JSON 发送请求

    我的 Flask 应用程序中有在请求中使用 JSON 的代码 我可以像这样获取 JSON 对象 Request request get json 这一直工作得很好 但是我正在尝试使用 Python 的 unittest 模块创建单元测试 但

随机推荐

  • 如何使用 Node.js 创建不存在的目录

    如果目录不存在 以下创建目录的正确方法是吗 它应该具有脚本的完全权限并且可供其他人读取 var dir dirname upload if path existsSync dir fs mkdirSync dir 0744 对于个人目录 v
  • MySQL - 在 WHERE 子句中使用 COUNT(*)

    我正在尝试在 MySQL 中完成以下任务 请参阅pseudo code SELECT DISTINCT gid FROM gd WHERE COUNT gt 10 ORDER BY lastupdated DESC 有没有办法在 WHERE
  • 设置独立于模型名称的种类名称(App Engine 数据存储区)

    作为一名 Python 程序员 我喜欢我的代码是可重用的 我试图避免代码中的种类名称冲突 其中两个不同的模型共享相同的种类名称 目前 我只是在模型的类名前面添加一些有意义的文本 但这非常不符合Python风格 能够显式设置模型的种类将解决我
  • 如何自动升级 Firebreath 插件

    最近 我使用 Firebreath 编写了一个跨浏览器插件 并为所有浏览器制作了一个安装程序 我在 stackoverflow 中搜索了自动插件安装 并找到了很多很好的答案 FireBreath插件自动安装 在网页上部署 Firebreat
  • 如何识别 html5 媒体元素已停止并等待进一步的媒体继续播放

    我正在与MediaSource and SourceBuffer播放 html5 视频 我按顺序获取 DASH 片段以继续不间断的视频播放 但有时 由于网络状况 SourceBuffer数据耗尽无法继续游戏 当该数据到达时 比赛将继续 但在
  • 使用 xslt 删除 xml 中的重复项

    我需要删除以下 xml 中的重复项
  • 在 C# 中序列化嵌套类?

    我想做的是序列化嵌套类 首先我的代码 Serializable public class SampleClass Serializable public class Person XmlElement Name public string
  • eval():无法分配给函数调用

    我的饼干答题器还有一个问题 这是我编写的产生错误的代码 cps cps bcps buych c c bprice buych eval buych eval buych 1 cps 是一个变量 c 是一个变量 b1 b2 b3 b4 b5
  • 如何从fragment中获取Toolbar?

    I have ActionBarActivity with NavigationDrawer并使用 support v7Toolbar作为动作栏 在我的片段之一中 工具栏有自定义视图 在其他片段中Toolbar应该显示标题 How get
  • ssh-add 创建连接到代理时出错:连接超时 (Windows 10)

    我正在尝试将 ssh 添加到 git 我已经生成了 ssh中有2个文件 在终端 MINGW64 中我输入 eval ssh agent s 它回应 Agent pid 3480 然后我输入 ssh add ssh id rsa 它响应 大约
  • 必须使用活动访问令牌在不同的 url 上查询有关当前用户的信息

    我正在开发托管在测试机上的 Facebook 应用程序 一切都很好 今天我想将其投入生产 我已经更改了 Facebook 开发人员的页面网址 从那一刻起 当我尝试使用此应用程序时 出现错误 An active access token mu
  • 将 NSTextField 的文本重置为空字符串 -- setText: 不起作用

    我有一个NSTextField 我需要一个按钮来重置字段的文本 我该怎么做呢 我一直在尝试这个 textBox setText textbox text 这不起作用 但我研究过 没有发现任何关于如何设置文本的信息 只找到如何获取文本 如果是
  • 如何保存YUV_420_888图像?

    我使用camera2 API 构建了自己的相机应用程序 我从样本开始 相机2Raw 并且我添加了 YUV 420 888 支持而不是 JPEG 但现在我想知道如何将图像保存在 ImageSaver 中 这是我的 run 方法的代码 Over
  • Tkinter - 画布滚动/滚动区域解释 - (非)限制区域

    它被带到我的注意力你不能用例如限制视图scrollregion 0 0 0 0 问题是为什么会这样 由于官方文档表明这应该有效并且不会抛出badRegion error 滚动区域 指定一个具有四个坐标的列表 描述左 上 矩形区域的右坐标和底
  • 从 JSON 字符串获取值

    我有以下 JSON 字符串 d Foo 7 Bar 5 Foobar 3 以及我的js文件中的相应调用 getJSON Foo svc GetSomeFoo function response alert response Foo aler
  • Swift - 发布构建崩溃,除非我关闭优化

    这是 XCode 6 2 上的 如果我在发布模式下运行应用程序 它会崩溃 但关闭优化后它不会崩溃 代码看起来很简单 我已经编程 ObjC 十多年了 所以对编程等并不陌生 我注意到 在 32 位中 它在发布模式 最快 O 下运行良好 但在 6
  • QTableWidgetItem 返回项目类型(pyqt)

    我正在使用 Qt 和 python 以及 pyqt 编写一个 QGIS 插件 在 QtDesigner 中 我有一个 QTableWidget 对象 如果有办法获取列项类型 我真的很挣扎 例如 在下表中 我输入一些用户可以编辑的默认参数 此
  • 如何调试 htaccess 重写脚本

    我想知道如何创建和调试这种脚本 如果您不习惯编写它们 像我一样 那么它可能会变得有点令人头痛 你使用工具来创建它们吗 有什么技巧可以调试正在发生的事情 而不是仅仅创建本地结构并查看浏览器中发生的情况 读者注意 旧答案不再有效 从版本 2 4
  • 在第一个“.”之前获取一个字符串与 PHP

    Lorem Ipsum 只是印刷和排版行业的虚拟文本 from Lorem Ipsum 只是印刷和排版行业的虚拟文本 自 1500 年代以来 Lorem Ipsum 一直是行业标准的虚拟文本 当时一位不知名的印刷商拿走了一堆字体并将其打乱以
  • 从列表中进行互斥随机抽样

    input beleriand mordor hithlum eol morgoth melian thingol 我在创建 X 个大小为 Y 的列表而不重复任何元素时遇到问题 我一直在做的是使用 x 3 y 2 import random