如何创建序列的子序列,例如[1,2,3]不包括Python中的非相邻子序列(例如[1,3])

时间:2012-02-09 16:06:44

标签: python algorithm powerset

例如,如果我有序列[1,2,3],那么生成子序列的算法是什么:

[1]
[2]
[3]
[1,2]
[2,3]
[1,2,3]

但不是

[1,3]

,也不

[3,2]

然后我希望将这些作为键插入到字典中以及在形成值的数据库中查找这些唯一子集的结果。我想知道你是否可以提供帮助?

非常感谢!

1 个答案:

答案 0 :(得分:3)

>>> x = [1, 2, 3]
>>> [x[a:b + 1] for a in range(len(x)) for b in range(a, len(x))]
[[1], [1, 2], [1, 2, 3], [2], [2, 3], [3]]

或者按照您要求的顺序获取它们:

>>> [x[a : a + n] for n in range(1, len(x) + 1)
                  for a in range(0, len(x) - n + 1)]
[[1], [2], [3], [1, 2], [2, 3], [1, 2, 3]]

  

然后我希望将这些作为键插入字典

您不能将列表用作字典中的键,因为字典要求其键是可清除的,并且您不能对列表进行哈希处理。

>>> {[1] : 'foo'}
Traceback (most recent call last):
  File "<pyshell#16>", line 1, in <module>
    {[1] : 'foo'}
TypeError: unhashable type: 'list'

您需要使用元组作为密钥。