Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python通过比较前一对来合并列表中子列表中的对列表';s第二个数字与下一对';s的第一个号码_Python_List_For Loop_Merge_Comparison - Fatal编程技术网

python通过比较前一对来合并列表中子列表中的对列表';s第二个数字与下一对';s的第一个号码

python通过比较前一对来合并列表中子列表中的对列表';s第二个数字与下一对';s的第一个号码,python,list,for-loop,merge,comparison,Python,List,For Loop,Merge,Comparison,我需要遍历这个列表对的子列表,并检查子列表中的下一个对的第一个数字是否与前一个对的第二个数字相同。如果相同,则合并 因此,它需要做的是合并[0,2]和[2,9]以获得[0,9],并且只合并[3,7],[7,9],[9,12]以获得[3,12],但不要触摸[15,17],因此第二个子列表子列表最终将变成[3,12],[15,17] 最后,主列表变成: [[[0, 2], [2, 9]], [[3, 7], [7, 9], [9, 12], [15, 17]], [[4, 6]]] 我该怎么做?我

我需要遍历这个列表对的子列表,并检查子列表中的下一个对的第一个数字是否与前一个对的第二个数字相同。如果相同,则合并

因此,它需要做的是合并
[0,2]
[2,9]
以获得
[0,9]
,并且只合并
[3,7],[7,9],[9,12]
以获得
[3,12]
,但不要触摸
[15,17]
,因此第二个子列表子列表最终将变成
[3,12],[15,17]
最后,主列表变成:

[[[0, 2], [2, 9]], [[3, 7], [7, 9], [9, 12], [15, 17]], [[4, 6]]]
我该怎么做?我尝试了以下方法,但无效:

[[[0, 9]], [[3, 12], [15, 17]], [[4, 6]]]
从上面的链接:

def merge(lst_of_lsts):
    res = []
    for sublist in lst_of_lsts:
        for i, ressublists in enumerate(res):
            if sublist[1]==ressublists[0]:
                res[i] += ([sublist[0],ressublists[-1]])
                break
        else:
            res.append(sublist)
    return res
def合并(次):
保存=列表(次数[0])
对于st,en in排序([排序(t)表示t in times]):
如果st>>mylist=[[0,2],[2,9],[[3,7],[7,9],[9,12],[15,17],[[4,6]]
>>>[我的列表中i的列表(合并(i))]
[[[0, 9]], [[3, 12], [15, 17]], [[4, 6]]]

这看起来很适用:那么这个函数怎么不起作用呢?你得到了什么输出?您是否有任何错误(给我们完整的回溯)。帮助我们,帮助你!我在merge([[0,4],[4,8]])上试过,得到了同样的结果。没有合并=(同样,请在问题中添加这一点;在评论中,它将丢失。请给我们一个简短的部分,介绍您如何称呼它,发生了什么,以及您期望的结果。“不合并”不是有用的信息。为了帮助您,我们需要知道该程序应该做什么(您确实已经很好地描述了),以及它实际上在做什么(你几乎没有描述过)。请运行你的程序(给定的程序只定义一个函数)并将输出包含在问题中。这非常有效!!谢谢!!!请为你修改它。只需复制粘贴:)@iteong:如果答案已经存在,请链接到它,而不是复制代码-所以尽量避免重复的问题。谢谢!
def merge(times):
    saved = list(times[0])
    for st, en in sorted([sorted(t) for t in times]):
        if st <= saved[1]:
            saved[1] = max(saved[1], en)
        else:
            yield list(saved)
            saved[0] = st
            saved[1] = en
    yield list(saved)

>>>mylist = [[[0, 2], [2, 9]], [[3, 7], [7, 9], [9, 12], [15, 17]], [[4, 6]]]
>>>[list(merge(i)) for i in mylist]
[[[0, 9]], [[3, 12], [15, 17]], [[4, 6]]]