我有 N个
清单,我想找到它们的独特组合。我已经将其写在白板上,并且似乎都具有某种模式,但我还没有找到它。我觉得我可以表达一种蛮力方法,这肯定是我追求的目标。还有其他选择吗?不同的数据结构(二进制树)会使这样的工作更合适吗?
鉴于 :
# 1 2
a = [1, 2]
b = [a, b]
结果将是:
c = [1a, 1b, 2a, 2b] # (4 unique combinations)
鉴于 :
v = [1, a]
w = [1, b]
x = [1, c]
y = [1, d]
z = [1, e]
结果将是:
r = [11111, 1bcde, 11cde, 111de, 1111e, a1111, ab111, abc11, abcd1, abcde, 1b1d1, 1bc1e, 11c11, 11c1e, ... ]
也许您正在寻找itertools.product:
#!/usr/bin/env python
import itertools
a=[1,2]
b=['a','b']
c=[str(s)+str(t) for s,t in itertools.product(a,b)]
print(c)
['1a', '1b', '2a', '2b']
v=[1,'a']
w=[1,'b']
x=[1,'c']
y=[1,'d']
z=[1,'e']
r=[''.join([str(elt) for elt in p]) for p in itertools.product(v,w,x,y,z)]
print(r)
# ['11111', '1111e', '111d1', '111de', '11c11', '11c1e', '11cd1', '11cde', '1b111', '1b11e', '1b1d1', '1b1de', '1bc11', '1bc1e', '1bcd1', '1bcde', 'a1111', 'a111e', 'a11d1', 'a11de', 'a1c11', 'a1c1e', 'a1cd1', 'a1cde', 'ab111', 'ab11e', 'ab1d1', 'ab1de', 'abc11', 'abc1e', 'abcd1', 'abcde']
请注意,乘积产生2 ** 5个元素。这是你想要的吗?
itertools.product在Python 2.6中。对于以前的版本,可以使用以下命令:
def product(*args, **kwds):
'''
Source: http://docs.python.org/library/itertools.html#itertools.product
'''
# product('ABCD', 'xy') --> Ax Ay Bx By Cx Cy Dx Dy
# product(range(2), repeat=3) --> 000 001 010 011 100 101 110 111
pools = map(tuple, args) * kwds.get('repeat', 1)
result = [[]]
for pool in pools:
result = [x+[y] for x in result for y in pool]
for prod in result:
yield tuple(prod)
编辑:正如豆形软糖指出的那样,原始问题要求唯一的集合。上面的代码不会产生独特套如果a
,b
,v
,w
,x
,y
,或z
包含重复的元素。如果这对您来说是个问题,那么您可以将每个列表转换为一个列表,然后再将其发送到itertools.product:
r=[''.join([str(elt) for elt in p]) for p in itertools.product(*(set(elt) for elt in (v,w,x,y,z)))]
我已经挠头几个小时了,需要一些帮助... 我有3个对象列表。每个列表可以包含相同的对象(但不是必须包含)。我想要一个算法来测试每个列表中是否至少有一个唯一的对象。 编辑:一个项目只能在每个列表中出现一次,但可以出现在多个列表中。 编辑:有一个伪第四个列表-三个列表中各有一个项目。这是必须包含唯一性的列表。每个列表中总共可能有3个项目。这应该返回true,因为第四个列表可能包含unique。 编辑:
问题内容: 我有这个桌子; 我希望选择这样的行: 任一或= 。 另一个字段应该是唯一的。 即我想从表中选择唯一,或者我需要以下结果: 怎么做? 为什么?因为我希望构建一个类似于Facebook的收件箱,在该收件箱中,已发送和已接收的消息将被聚合,而此查询是迄今为止的瓶颈。 我正在使用Rails 3.2和Postgres 9.3。 问题答案: (not )从结果中删除重复项,从而不必要。您可能希望在
问题内容: python是否有不可变的列表? 假设我希望具有元素的有序集合的功能,但是我想保证不会改变,那么如何实现呢?列表是有序的,但可以更改。 问题答案: 是。称为。 所以,相反的是一个和可以突变,是,不能。 更多的信息: 不能通过编写实例化一个元素,而是需要编写。这是因为解释器在括号中还有其他用途。 您也可以完全取消括号:与 请注意,元组不是 完全 不可变的列表。单击此处以了解有关列表和元组
假设我有一个由n个字符串列表组成的列表: result->包含所有输出列表(所有组合) current->是当前的组合 用上述相同示例调用此函数时的输出:
问题内容: 我不确定这是否可行,但我想计算表中唯一值的数量。我知道要计算我执行的唯一FolderID的数量: 但是我想对文件夹表中的文件夹标识和用户标识的唯一组合数进行计数。有没有办法做到这一点? 问题答案:
问题内容: 在一个假设的场景中,我是没有表创建特权的用户。我想知道表中的列是否具有 UNIQUE CONSTRAINT 。是否可以在 词典中 查找?我将如何处理? 问题答案: 此处给出的两个答案都缺少一种在列上实施唯一性的方法:通过创建 唯一索引 (而不在列上定义唯一约束)。如果您不熟悉此选项,请参见这两个链接(一个,两个)。 除 唯一约束检查 外 ,还应执行此检查: 要检查唯一约束,请使用已经提