Как создать подпоследовательности для последовательности, например [1,2,3], не включая несмежные подпоследовательности (например, [1,3]) в Python - PullRequest
0 голосов
/ 09 февраля 2012

Так, например, если у меня есть последовательность [1, 2, 3], какой будет алгоритм для генерации подпоследовательностей:

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

, но не

[1,3]

ни

[3,2]

Затем я надеюсь вставить их в качестве ключей в словарь вместе с результатом поиска этих уникальных подмножеств в базе данных, формирующей значение.Интересно, вы могли бы помочь с этим?

Большое спасибо!

1 Ответ

3 голосов
/ 09 февраля 2012
>>> 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'

Вместо этого вам нужно будет использовать кортежи в качестве ключей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...