我有一份表单
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 列表上进行多次迭代并组合这些元素,一直持续到列表中的元素数量在迭代后停止变化。我怎样才能以更加pythonic的方式实现这一目标?
答案 0 :(得分:3)
这应该可以解决问题
out = [inp[0]]
for l in inp[1:]:
if l[0] == out[-1][1] + 1:
out[-1][1] = l[1]
else:
out.append(l)
答案 1 :(得分:1)
你的意思是使用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)]