Python 嵌套链表操作

Python 嵌套链表操作,python,list,algorithm,Python,List,Algorithm,我有一个列表,列表中的每一项也是一个列表 所有子列表都有2个元素,它们链接在一起 [l1, l2, l3, l4...] 它们连接在一起的方式是l2[-1]等于l1[0],l3[-1]等于l2[0],l4[-1]=l3[0]等等 所有子列表都有字符串元素,如'1 2 3'(由空格分隔的多个唯一数字)或'7'(只有一个数字) 我想对下面的列表进行转换 [['1 2 3', '4 5'], ['6 7', '1 2 3'], ['10', '6 7']] 输出将是 [[['1', '4'], [

我有一个列表,列表中的每一项也是一个列表

所有子列表都有2个元素,它们链接在一起

[l1, l2, l3, l4...]
它们连接在一起的方式是
l2[-1]
等于
l1[0]
l3[-1]
等于
l2[0]
l4[-1]=l3[0]
等等

所有子列表都有字符串元素,如
'1 2 3'
(由空格分隔的多个唯一数字)或
'7'
(只有一个数字)

我想对下面的列表进行转换

[['1 2 3', '4 5'], ['6 7', '1 2 3'], ['10', '6 7']]
输出将是

[[['1', '4'], ['6', '1'], ['10', '6']],
 [['2', '4'], ['6', '2'], ['10', '6']],
 [['3', '4'], ['6', '3'], ['10', '6']],
 [['1', '5'], ['6', '1'], ['10', '6']],
 [['2', '5'], ['6', '2'], ['10', '6']],
 [['3', '5'], ['6', '3'], ['10', '6']],
 [['1', '4'], ['7', '1'], ['10', '7']],
 [['2', '4'], ['7', '2'], ['10', '7']],
 [['3', '4'], ['7', '3'], ['10', '7']],
 [['1', '5'], ['7', '1'], ['10', '7']],
 [['2', '5'], ['7', '2'], ['10', '7']],
 [['3', '5'], ['7', '3'], ['10', '7']]]
在哪里

  • 最内部列表的元素是只包含一个数字的字符串
  • 子列表还满足前面所述的属性


我有一个线索,这就像你必须通过每个点(示例中的六个点)并选择一个数字,选择哪个数字取决于你之前选择的一对,到目前为止,我还没有取得更多进展。

如果你不想生成所有组合,然后选择“有效”的组合,您可以首先从列表中仅获取唯一值。 然后,您可以获取其中的
itertools.product
(在拆分字符串之后),并从以下内容重建“链接”列表:

lst = [['1 2 3', '4 5'], ['6 7', '1 2 3'], ['10', '6 7']]
sub = [lst[0][1]] + [x[0] for x in lst] # ['4 5', '1 2 3', '6 7', '10']
res =  [ [(b,a) for a,b in zip(p, p[1:])] for p in product(*map(str.split, sub))]
我在这里使用元组而不是嵌套列表只是为了理解复杂列表的可读性,可以用更多的
[…]
替换
(…)
。结果:

[[('1', '4'), ('6', '1'), ('10', '6')],
 [('1', '4'), ('7', '1'), ('10', '7')],
 [('2', '4'), ('6', '2'), ('10', '6')],
 [('2', '4'), ('7', '2'), ('10', '7')],
 [('3', '4'), ('6', '3'), ('10', '6')],
 [('3', '4'), ('7', '3'), ('10', '7')],
 [('1', '5'), ('6', '1'), ('10', '6')],
 [('1', '5'), ('7', '1'), ('10', '7')],
 [('2', '5'), ('6', '2'), ('10', '6')],
 [('2', '5'), ('7', '2'), ('10', '7')],
 [('3', '5'), ('6', '3'), ('10', '6')],
 [('3', '5'), ('7', '3'), ('10', '7')]]

如果不希望生成所有组合,然后选择“有效”组合,则可以首先从列表中获取唯一值。 然后,您可以获取其中的
itertools.product
(在拆分字符串之后),并从以下内容重建“链接”列表:

lst = [['1 2 3', '4 5'], ['6 7', '1 2 3'], ['10', '6 7']]
sub = [lst[0][1]] + [x[0] for x in lst] # ['4 5', '1 2 3', '6 7', '10']
res =  [ [(b,a) for a,b in zip(p, p[1:])] for p in product(*map(str.split, sub))]
我在这里使用元组而不是嵌套列表只是为了理解复杂列表的可读性,可以用更多的
[…]
替换
(…)
。结果:

[[('1', '4'), ('6', '1'), ('10', '6')],
 [('1', '4'), ('7', '1'), ('10', '7')],
 [('2', '4'), ('6', '2'), ('10', '6')],
 [('2', '4'), ('7', '2'), ('10', '7')],
 [('3', '4'), ('6', '3'), ('10', '6')],
 [('3', '4'), ('7', '3'), ('10', '7')],
 [('1', '5'), ('6', '1'), ('10', '6')],
 [('1', '5'), ('7', '1'), ('10', '7')],
 [('2', '5'), ('6', '2'), ('10', '6')],
 [('2', '5'), ('7', '2'), ('10', '7')],
 [('3', '5'), ('6', '3'), ('10', '6')],
 [('3', '5'), ('7', '3'), ('10', '7')]]

请注意,这与普遍接受的定义“”有所不同。请注意,这与普遍接受的定义“”有所不同。这是一个非凡的见解!这真是一个非凡的洞察力!