组合列表中的元素

2024-04-19 21:57:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一份表格清单

in_list = [[10, 15], [16,21], [22,25], [26,30], [35,40], [45,50],[51,55]]

我需要将在最后和第一个位置包含连续整数的连续列表合并到列表中。所以呢

if in[1][0] = in[0][1] + 1:
    out[0] = [in[0][0],in[1][1]]

输出形式为

out_list = [[10,30], [35, 40], [45,55]]

现在,我的代码在out列表上进行多次迭代,并合并元素,直到迭代后列表中的元素数停止更改为止。我怎样才能以一种更为变态的方式来达到这个目的呢?你知道吗


Tags: 代码in目的元素列表if方式整数
2条回答

你是说用numpy做一行吗?:)

尝试以下快捷方式:

import numpy as np

# data is of shape (n,2), n=6
data = np.array([[10, 15], [16,21], [22,25], [26,30], [35,40], [45,50],[51,55]]) 

# seek for consecutive numbers
marks = (data[:-1,1]+ 1) == data[1:,0] 

# re-arrange and return to python lists
output = np.stack([data[:-1,0][marks],data[1:,1][marks]],axis=1).tolist() 

编辑
使用列表的另一个选项:

data = [[10, 15], [16,21], [22,25], [26,30], [35,40], [45,50],[51,55]]

mylist = []

def func(x1,x2):
    if x1[1] +1 == x2[0]:
        mylist.append((x1[0],x2[1]))

list(map(func,data[:-1],data[1:]))
print(mylist)

输出:

[(10, 21), (16, 25), (22, 30), (45, 55)]

这应该能奏效

out = [inp[0]]
for l in inp[1:]:
    if l[0] == out[-1][1] + 1:
        out[-1][1] = l[1]
    else:
        out.append(l)

相关问题 更多 >