首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >嵌套链表操作

嵌套链表操作
EN

Stack Overflow用户
提问于 2020-09-10 10:16:04
回答 2查看 192关注 0票数 0

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

所有的子列表都有两个元素,它们连接在一起,

代码语言:javascript
运行
复制
[l1, l2, l3, l4...]

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

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

我想对下面的列表做一个转换

代码语言:javascript
运行
复制
[['1 2 3', '4 5'], ['6 7', '1 2 3'], ['10', '6 7']]

输出将是

代码语言:javascript
运行
复制
[[['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']]]

哪里

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

我有一条线索,就像你必须把每一个点(例子中的六个点)都传递出去,然后挑出一个数字,选择哪个数字取决于你之前选择的一对,到目前为止,我还没有取得更多的进展。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-09-10 12:36:07

如果您不想生成所有的组合,然后选择“有效的”组合,那么首先可以从列表中获得唯一的值。然后,您可以获得这些字符串的itertools.product (在拆分字符串之后),并从这些列表中重构“链接”列表:

代码语言:javascript
运行
复制
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))]

我在这里使用元组而不是嵌套列表,只是为了理解复杂列表的可读性,可以使用更多的(...)替换[...]。结果:

代码语言:javascript
运行
复制
[[('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')]]
票数 1
EN

Stack Overflow用户

发布于 2020-09-10 12:59:00

代码语言:javascript
运行
复制
import copy

lst = [['1 2 3', '4 5'], ['6 7', '1 2 3'], ['10', '6 7']]

def print_list(ls):
    if ls is not None:
        for x in ls:
            print x

def transform_list(l):

    if(len(l)==0):
        print 'list provided is empty'
        return None

    tr=[] # intermediate transformed list

    for b in l[0][-1].split(' '):

        for a in l[0][0].split(' '):

            tr = tr + [[[a,b]]]

    for i in range(1,len(l)):
    
        new_tr = []
        
        for a in l[i][0].split(' '):
            
            temp_tr=copy.deepcopy(tr)

            for t in range(len(temp_tr)):

                temp_tr[t].append( [a,temp_tr[t][-1][0]] )

            new_tr = new_tr + temp_tr

        tr=copy.deepcopy(new_tr)
            
    return tr


print '\n\nOutput:'
transformed_list = transform_list(lst)
print_list(transformed_list)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63827521

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档