- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试创建一系列项目列表的限制排列。每个项目都有一个类别,我需要找到项目组合,以使每个组合不包含来自同一类别的多个项目。为了说明,这里有一些示例数据:
Name | Category
==========|==========
1. Orange | fruit
2. Apple | fruit
3. GI-Joe | toy
4. VCR | electronics
5. Racquet | sporting goods
组合将被限制为三个长度,我不需要每个长度的每个组合。因此,上述列表的一组组合可能是:
(Orange, GI-Joe, VCR)
(Orange, GI-Joe, Racquet)
(Orange, VCR, Racquet)
(Apple, GI-Joe, VCR)
(Apple, GI-Joe, Racquet)
... and so on.
我经常在各种列表上这样做。列表的长度永远不会超过 40 个项目,但可以理解的是,这可能会产生数千种组合(尽管每个列表可能会有大约 10 个独特的类别,这在一定程度上有所限制)
我想出了一些伪 python 来说明如何递归地实现它。自从我学习组合学以来已经太久了,但据我所知,这本质上是集合组合的子集,类似于 C(列表长度,所需大小)。可能有一些库模块可以使它更清洁(或至少更高效)
我想知道是否有比我现有的方法更好的方法(也许以某种方式使用 itertools.combinations
):
# For the sake of this problem, let's assume the items are hashable so they
# can be added to a set.
def combinate(items, size=3):
assert size >=2, "You jerk, don't try it."
def _combinate(index, candidate):
if len(candidate) == size:
results.add(candidate)
return
candidate_cats = set(x.category for x in candidate)
for i in range(index, len(items)):
item = items[i]
if item.category not in candidate_cats:
_combinate(i, candidate + (item, ))
results = set()
for i, item in enumerate(items[:(1-size)]):
_combinate(i, (item, ))
return results
最佳答案
朴素的方法:
#!/usr/bin/env python
import itertools
items = {
'fruits' : ('Orange', 'Apple'),
'toys' : ('GI-Joe', ),
'electronics' : ('VCR', ),
'sporting_goods' : ('Racquet', )
}
def combinate(items, size=3):
if size > len(items):
raise Exception("Lower the `size` or add more products, dude!")
for cats in itertools.combinations(items.keys(), size):
cat_items = [[products for products in items[cat]] for cat in cats]
for x in itertools.product(*cat_items):
yield zip(cats, x)
if __name__ == '__main__':
for x in combinate(items):
print x
将产生:
# ==>
#
# [('electronics', 'VCR'), ('toys', 'GI-Joe'), ('sporting_goods', 'Racquet')]
# [('electronics', 'VCR'), ('toys', 'GI-Joe'), ('fruits', 'Orange')]
# [('electronics', 'VCR'), ('toys', 'GI-Joe'), ('fruits', 'Apple')]
# [('electronics', 'VCR'), ('sporting_goods', 'Racquet'), ('fruits', 'Orange')]
# [('electronics', 'VCR'), ('sporting_goods', 'Racquet'), ('fruits', 'Apple')]
# [('toys', 'GI-Joe'), ('sporting_goods', 'Racquet'), ('fruits', 'Orange')]
# [('toys', 'GI-Joe'), ('sporting_goods', 'Racquet'), ('fruits', 'Apple')]
关于python - 按类别创建项目列表的受限排列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3686521/
我有一个数据类型是 Monoid 的实例所以我可以得到很好的值(value)观组合: data R a = R String (Maybe (String → a)) instance Monoid
目标:我需要在权限非常有限的 AppDomain 中运行一些代码 - 它应该无法访问任何花哨或不安全的东西,除了少数我在别处定义的辅助方法。 我所做的:我正在创建一个具有所需基本权限的沙箱 AppDo
在我的 VPS 中,我不知道为什么,但是当我对另一个用户执行 su 时,我得到的是: root@deb64:~# su john $ 带选项卡的自动完成不起作用,甚至是命令源。示例: root@deb
我正在寻找一种方法,将二进制代码标记为“受限”,而代码是用swift编写的。 我特别要说的是,将这些标志设置到链接器以防止动态库加载: -Wl,-sectcreate,__RESTRICT,__res
这个问题在这里已经有了答案: Access restriction on class due to restriction on required library rt.jar? (15 个答案)
我正在寻找一个基于Web的JavaScript textarea编辑器,该编辑器支持诸如可选字体,文本颜色,段落对齐等标准功能。但是,有一个相当大的约束:格式应始终应用于所有文本,而不是部分文本。文本
我有以下查询: SELECT pro.* FROM tb_AutProposta pro, tb_AutParcelamento par WHERE pro.id = par.id 但是,想要将
我的问题实际上是一个逻辑问题,任务是将列表截断到 Racket 中的给定长度。也就是说,给定一个列表 (A B C),给定长度为 2,我想要一个新列表 (A B)。限制是我们有可用功能的限制列表,我将
我试图将 jQuery UI DatePicker 限制为仅当前年份,到目前为止它在 This Demo 处工作正常。 我使用以下代码来完成这项工作 $("#datepicker").datepick
我在 minikube 中启用了 podsecuritypolicy。默认情况下,它创建了两个 psp - 特权和受限。 NAME PRIV CAPS SELINUX
我使用 Google Cloud Endpoints 定义了一个简单的 API: @Api(name = "realestate", version = "v1") public class Real
我在Tableau中设计可视化,我的数据在Hive/hadoop中,数据量很大, 当我尝试设计可视化时,查询运行非常非常慢,因为每次它尝试从 hadoop 中提取数据。 所以对于任何可视化,简单的拖放
我已经在这个问题上停留了一段时间。我正在尝试访问我使用 HttpClient 和 Tomcat 7 实现的 ContainerServlet。我不断收到错误消息“Restricted(Containe
由于使用了太多的 Websphere Message Broker 实例或类似的东西,我们刚刚用完了 Linux 机器上的信号量。 我和一位同事想知道为什么这甚至是有限的 - 这只是一点内存,对吧?
我正在尝试复制 boost::variant二维矢量转化为array .使用指令 copy(vectorName.begin(), extentName); .首先我得到错误,因为矢量类型是 vari
我的数据库非常受 cpu 限制,我找不到问题的根本原因。我目前有两个应用程序服务器,每个服务器都有一个 Rails api,通过 ruby-pg gem 连接到 PostgreSQL。两个应用程序
我已经开始学习多核编程和开发并行算法。这可以通过在 Java 中使用多线程轻松完成。因此,我创建了两个包含 10 行内容的文本文件,如下所示: This is the first line in fi
Jinja 的 sandbox Zope 2 RestrictedPython 似乎解决了类似的问题。有没有办法对它们进行分层,即在 Jinja 环境中使用 RestrictedPython 策略?用
我在 Azure VNet 上有一个 HDInsight Hadoop 群集(Linux,单独部署)(使用 NSG 限制客户端 IP)。 Azure SQL 防火墙有一个名为“允许访问 Azure 服
这就是我想要做的:我想使用“_”函数以 gettext 兼容的方式为我的 zmi python 脚本启用 i18n 支持。 这是我到目前为止所做的。在我的 Zope 产品的模块中,我运行: impor
我是一名优秀的程序员,十分优秀!