为前缀跨度问题创建序列

时间:2016-11-08 11:57:01

标签: python list tuples

我正在尝试创建一个包含序列的列表,以便调用PrefixSpan算法。我需要一个这种形式的列表:

 [ [["a", "b"], ["c"]], [["b", "c"], ["d"]], [["c", "d"], ["e"]]]

其中嵌套列表的前两个字母是规则/序列,单个字母是结果。

我有这种形式的数据:

[[u'a',
  u'b',
  u'c',
  u'd',
  u'e',
  u'f',
],
 [u'a',
  u'b',...]]

将以下逻辑应用于此数据:

   a1 =[]
    for i in range(len(list2)):
      a2 = list2[i]
      for j in range(len(a2)-2):
        a1.append([a2[j],a2[j+1]])
        a1.append([a2[j+2]])

结果具有以下形式:

 [[[u'a', u'b'],
          [u'c'],
          [u'd', u'e'],
          [u'f'],
          [u'g', u'h'],...]]

所以我无法创建这个嵌套的二对一元组序列。

1 个答案:

答案 0 :(得分:1)

我用列表理解来做这件事。我创建了以下代码:

a = [[u'a',u'b',u'c',u'd',u'e',u'f'],[u'a2',u'b2',u'c2',u'd2',u'e2',u'f2']]
print([[[v,x[i+1],[x[i+2]]] for i,v in enumerate(x) if i<len(x)-2] for x in a])

输出结果为:

[[[u'a', u'b', [u'c']], [u'b', u'c', [u'd']], [u'c', u'd', [u'e']], [u'd', u'e', [u'f']]], [[u'a2', u'b2', [u'c2']], [u'b2', u'c2', [u'd2']], [u'c2', u'd2', [u'e2']], [u'd2', u'e2', [u'f2']]]]

我希望这是一个解决你问题的想法。有关详细信息,您可以查找“嵌套列表理解”。