python 通过比较前一对的第二个数字和下一对的第一个数字来合并列表中子列表中的对列表
python merging pairs lists within sublists within a list by comparing previous pair's second number with next pair's first number
[[[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]
但是不要touch [15, 17]
,所以第二个子列表子列表最终会变成 [[3, 12], [15, 17]]
最后主列表变为:
[[[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
来自上面的link:
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]]]
[[[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]
但是不要touch [15, 17]
,所以第二个子列表子列表最终会变成 [[3, 12], [15, 17]]
最后主列表变为:
[[[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
来自上面的link:
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]]]